<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>


<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>

<span class="Apple-style-span" style="color: rgb(42, 42, 42); font-family: 'Segoe UI', Tahoma, Verdana, Arial, sans-serif; line-height: 17px; font-size: 10pt; ">Date de baja: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank" style="line-height: 17px; font-weight: inherit; text-decoration: underline; color: rgb(0, 104, 207); cursor: pointer; ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></span><div style="font-family: Tahoma; font-size: 10pt; "><font class="Apple-style-span" color="#2A2A2A" face="'Segoe UI', Tahoma, Verdana, Arial, sans-serif"><span class="Apple-style-span" style="line-height: 17px;"><br></span></font></div><div><font class="Apple-style-span" face="Tahoma" size="2"><a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank" style="font-weight: inherit; text-decoration: underline; cursor: pointer; "></a></font><font class="Apple-style-span" color="#2A2A2A" face="'Segoe UI', Tahoma, Verdana, Arial, sans-serif"><font class="Apple-style-span" face="Tahoma" size="2"><span class="Apple-style-span" style="line-height: 17px;">Y luego si estás interesado en seguir </span></font><font class="Apple-style-span" size="2"><span class="Apple-style-span" style="line-height: 17px;">recibiéndolo, te aconsejo que crees una cuenta para tal fin o filtres de alguna el correo de las listas. Por ejemplo con hotmail, puedes asociar correos a determinadas carpetas.</span></font></font><span class="Apple-style-span" style="color: rgb(42, 42, 42); font-family: 'Segoe UI', Tahoma, Verdana, Arial, sans-serif; "><font class="Apple-style-span" size="2"><span class="Apple-style-span" style="line-height: 17px;"> </span></font></span><span class="Apple-style-span" style="color: rgb(42, 42, 42); font-family: 'Segoe UI', Tahoma, Verdana, Arial, sans-serif; "><font class="Apple-style-span" face="Tahoma" size="2"><span class="Apple-style-span" style="line-height: 17px;"> </span></font></span></div><div><div style="font-family: Tahoma; font-size: 10pt; "><br><div id="SkyDrivePlaceholder" style="font-family: Tahoma; "></div><hr id="stopSpelling" style="font-family: Tahoma; "><font class="Apple-style-span" face="Tahoma">Date: Sat, 16 Apr 2011 10:15:17 -0400</font><br><font class="Apple-style-span" face="Tahoma">From: picasso02@gmail.com</font><br><font class="Apple-style-span" face="Tahoma">To: cconclase@listas.conclase.net</font><br><font class="Apple-style-span" face="Tahoma">Subject: Re: [C con Clase] fatal error LNK1136: invalid or corrupt file</font><br><br><font class="Apple-style-span" face="Tahoma">Hola a todos!</font><div style="font-family: Tahoma; "><br></div><div style="font-family: Tahoma; ">Les puedo pedir un favor??? me podrían dejar de mandar estos mensajes? es que en verdad el correo lo uso para otras cosas. Gracias, chao!<br><br><div class="ecxgmail_quote">El 16 de abril de 2011 04:46, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>></span> escribió:<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">Hola Wolverine,<div class="ecxim"><br>
<br>
On 4/16/2011 1:23 AM, wolverine wrote:<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
hola steven cuanto tiempo bueno pues adaptandolo al ejemplo dela<br>
pagina mi destructor quedaria algo asi usando el cab:<br>
<br>
<br>
          util* aux;<br>
<br>
        while(cab!=NULL) {<br>
                aux = cab;<br>
                cab = cab->sgte;<br>
                delete aux;<br>
    }<br>
        ultimo = NULL;<br>
<br>
</blockquote>
<br></div>
Esta última asignación no es necesaria, ya que este objeto de la clase 'listautil' y sus datos serán liberados y dejarán de existir en memoria. Por lo tanto, es irrelevante qué información guardan, ya que se va a perder en cuanto se termine de ejectuar esta función - el destructor.<div class="ecxim">
<br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
       if(cab==NULL)<br>
          cout<<"\n        no hay utiles en la lista";<br>
          else<br>
          cout<<"\n\n Lista de utiles  borrada.";<br>
<br>
      getch();<br>
<br>
<br>
...bueno al menos ya se soluciono lo del "general protection<br>
exception" cuando ingreso la opcion salir, lo unico es que la ventana<br>
se queda inactiva y alli se queda bueno eso no me preocupa tanto, lo<br>
que pasa esque esta lista forma parte de un programa mas grande al<br>
cual envio  a esta lista como parametro a otra  lista de utiles<br>
comprados . Esta ultima es una lista que sirve parallevar el registro<br>
de los utiles comprados que por cierto ya no es una lista enlazada<br>
sino una dinamica empleando un vector<br>
<br>
</blockquote>
<br></div>
No estoy seguro de la implementación exacta que has hecho, pero sugiero mantener o bien un vector (array) de punteros a los útiles, o incluso punteros a los nodos que contienen los útiles, o bien una lista dinámciamente enlazada de punteros a los útiles. Por ejemplo,<br>

<br>
util **pListaUtilesCompradas;<br>
int nCant;<br>
<br>
Ahora puedes crear un vector (array) dinámico de punteros a 'util'. Por ejemplo,<br>
<br>
pListaUtilesCompradas = new util *[nCant];<br>
<br>
Y luego, puedes ir agregando útiles existentes al vector. Obtenemos estos punteros a 'util' de la lista dinámicamente enlazada que ya creaste.<br>
<br>
De esta manera, no tienes que mantener información duplicada. Puedes pensar que es como una mini-base de datos.<div class="ecxim"><br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
<br>
//CLASE QUE REGISTRA LOS UITLES COMPRADOS<br>
<br>
class compra<br>
{<br>
   char codutil[10];<br>
   int cantidad;<br>
   float subtotal;  //precio*cantidad<br>
<br>
</blockquote>
<br></div>
Si 'subtotal' es calculada, entonces no aconsejo guardarla como miembro, sino que sea calculada y dada a través de una función miembro.<div class="ecxim"><br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
   public:<br>
<br>
    compra();<br>
<br>
    void llenar(listautil);<br>
   void presenta();<br>
   char* getcodutil(){return codutil;}<br>
   void setcodutil(char* cod){strcpy(codutil,cod);}<br>
   float getsubtotal(){return subtotal;}<br>
</blockquote>
<br></div>
No retornes el valor, sino calcúlalo en el momento.<div class="ecxim"><br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
<br>
};<br>
<br>
<br>
//////////////////////////funciones cLAse compra//////////////////////<br>
  compra::compra(){<br>
    codutil[0]=NULL;<br>
</blockquote>
<br></div>
Usa el carácter nulo, '\0'.<div class="ecxim"><br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
<br>
   cantidad=0;<br>
    subtotal=0.0;<br>
<br>
  }<br>
<br>
void compra::llenar(listautil LU){<br>
</blockquote>
<br></div>
En sí, esto no es un problema, pero según el diseño actual de 'listautil', sí los vas a tener.<br>
<br>
Aquí estás pasando el objeto por copia (o por valor). Esto significa que se instancia un objeto local, 'LU', que será una copia del objeto original que pasas a esta función miembro.<br>
<br>
El problema es que tu diseño de 'listautil' no implementa un constructor copia. Por lo tanto, se usa el constructor copia por defecto, que simplemente copia la información de un objeto a otro. En tu caso, esto es problemático porque estás copiando punteros; o sea, copias direcciones de memoria. Esto se llama: una copia superficial.<br>

<br>
La solución es hacer una copia profunda. Implementa un constructor copia para 'listautil' para crear memoria dinámicamente para cada nodo de la lista y copiar cada nodo a los nuevos. Esto es,<br>
<br>
listautil::listautil( const listautil &ref )<br>
{<br>
  // Crea cada nodo y<br>
  //   copia cada nodo de 'ref' a cada nodo de este objeto<br>
  ...<br>
}<br>
<br>
Ahora bien, en el caso de 'llenar()', recomiendo pasar el objeto original por referencia, pero tratado como un objeto constante. Esto es,<br>
<br>
void compra::llenar( const listautil &LU )<br>
<br>
Así nos ahorramos memoria al pasar el objeto como parámetro y además no instanciamos un objeto local.<div class="ecxim"><br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
<br>
        util* posx;<br>
        char cod1[10];<br>
                posx=new util();<br>
<br>
  cout<<"\n  Registro de nuevo compra: \n" ;<br>
<br>
SD>//AQUI ES EL PROBLEMA SOLO ME DEJA COMPRAR UN UTIL ESCOLAR<br>
SD>//Y SI QUIERO SEGUIR COMPRANDO ES COMO SI LA LISTA DE UTILES SE HUBIESE SD>//BORRADO Y POR LO TANTO EL DO-WHILE YANO ME DEJA AVANZAR<br>
<br>
</blockquote>
<br></div>
He dado la explicación anterior acerca del problema.<br>
<br>
[CORTE]<div class="ecxim"><br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
Es ovio que para saber que utiles quiero "comprar" debo saber que<br>
utiles existen, por eso mismo es que en cada elemento de las Lista de<br>
utiles comprados debo tener adentro de esta ala Lista de Utiles, creo<br>
que ahi parte el nuevo problema...meter una lista enlazada dentro de<br>
"algo"...creo que los punteros lo complican todo pero tengo que<br>
hacerlo exclusivamente asi lamentablemente.<br>
<br>
</blockquote>
<br></div>
Creo que he explicado la solución a esto. Piensa que creas una base de datos, que es la lista de útiles existentes. En la lista de compras, creas otra lista de punteros a estos útiles los cuales existen en esa base de datos. Así no tienes que copiar útiles, sino que apuntas a ellos. Seguramente necesitarás esa lista de útiles como miembro a esta lista de compras.<br>

<br>
Por otro lado, también es cierto que cada útil tiene su código, que me imagino que es a modo de identificación. Por lo tanto, podrías crear una lista de códigos los cuales representan los útiles. Esta técnica es buena para relacionar información, como en una base de datos, pero como tenemos punteros en C++, creo que éstos nos sirve mejor que los códigos.<div class="ecxim">
<br>
<br>
<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">
Y esta lista de utiles comprados(listacompras) es un miembro dato de<br>
class venta que forma parte de una Listaventas pero ya no quiero<br>
complicar mas las cosas tampoco se sime deje entender bueno las<br>
disculpas del caso sinome supe expresar de todos modos se agradece la<br>
ayuda o comentarios<br>
<br>
</blockquote>
<br></div>
Nuevamente, estamos ante el mismo problema de antes. La información - los útiles - sigue siendo la misma. Por consiguiente, creamos listas o vectores de punteros o de códigos para acceder a esa información indirectamente.<br>

<br>
Sugiero que dediques más tiempo al diseño, antes de lanzarte a escribir código fuente. Piensa en las soluciones que te he dado; quizá te interesen más.<div class="ecxim"><br>
<br>
<br>
Espero que todo esto te ayude.<br>
<br></div><font color="#888888">
Steven</font><div><div></div><div class="h5"><br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>José Pablo Montesinos Abujatum<br>
</div>
<br><font class="Apple-style-span" face="Tahoma">_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ</font></div></div>
                                          </body>
</html>