<html><div style='background-color:'><DIV class=RTE><FONT style="FONT-SIZE: 11px; FONT-FAMILY: tahoma,sans-serif"> </DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #a0c6e5 2px solid; MARGIN-RIGHT: 0px">
<DIV></DIV>
<P>From:  <I>ori_ganduxe Ganduxé Pregona<oriol_ganduxe@hotmail.com></I><BR>Reply-To:  <I>Lista de correo sobre C y C++ <cconclase@listas.conclase.net></I><BR>To:  <I>cconclase@listas.conclase.net</I><BR>Subject:  <I>[C con Clase] Duda con estructura dinamica</I><BR>Date:  <I>Mon, 13 Aug 2007 07:25:34 +0000</I><BR>>Buenas, soy nuevo en la lista y hace poco que he empezado con C++, así que<BR>>no creo que les resulte muy dificil la duda que tengo:<BR>><BR>>Estoy practicando el uso de estructuras dinamicas y he hecho una función<BR>>para insertar un valor al final de la lista. El problema creo que se<BR>>encuentra aquí pues si lo saco no me da error.<BR>>El programa compila correctamente pero al reproducir me sale el tipico<BR>>mensaje de "enviar errores" de windows. Muchas gracias por 
todo.<BR>><BR>>void insertar_al_final(struct node *&p){<BR>><BR>>node *nou_node;<BR>>node *aux = p;<BR>><BR>>nou_node = new node;<BR>><BR>>      cout << "Inserta el valor: ";<BR>>      cin >> nou_node->numero;<BR>><BR>>      nou_node->seguent = NULL;<BR>><BR>>      while(aux->seguent != NULL)         aux = aux->seguent;<BR>><BR>>      aux->seguent = nou_node;<BR>><BR>>}</P></BLOCKQUOTE>
<P>El error esta en el parametro de la funcion, estas definiendo una estructura en la lista de parametros de la funcion insertar_al_final( ), para pasar estructuras como parametros simplemente necesitas poner el nombre de la estructura como si fuera cualquier tipo base(int,char,long,etc.). Quedaría así:</P>
<P>void insertar_al_final(node *&p){...}  </P>
<P>Donde "*&p" lo veo algo redundante, al momento de pasar un puntero si modificas el valor de esa direccion seria lo mismo que si pasaras la referencia, se modificaria la variable exterior a la funcion. Sería suficiente que declararas algo como:</P>
<P>void insertar_al_final(node *p){...} // pasa un puntero apuntando a una variable de tipo node</P>
<P>en caso de que la variable que vayas a pasar a la funcion no sea un puntero deberias declararla de la siguiente forma:</P>
<P>void insertar_al_final(node &p){...} //pasa una referencia de una variable de tipo node</P>
<P>No creo que definieras esa estructura a proposito en la lista de parametros de la función, porque en las lineas siguientes tienes declaraciones como "nou_node->segment","nou_node->numero",etc, que son variables que en ningun momento has declarado para esa estructura.</P>
<P>Luego:</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">>node *nou_node; //declara un puntero a una variable de tipo node<BR>>node *aux = p; /*declara un puntero que apunta a la misma direccion que p,por lo > que modificaciones  permaneceran*/</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">>nou_node = new node; //reserva espacio para una variable de tipo node<BR>><BR>>      cout << "Inserta el valor: ";<BR>>      cin >> nou_node->numero; //numero guarda el valor que se inserte, ya sea en tipo int o char[] no lo se<BR>><BR>>      nou_node->seguent = NULL; //el puntero a char(a menos eso supongo) seguent es una cadena vacia<BR>><BR>>      while(aux->seguent != NULL)         aux = aux->seguent; </P>
<P dir=ltr style="MARGIN-RIGHT: 0px">loop infinito a menos que p->seguent contenga una cadena no nula, ademas la asignacion es invalida</P>
<P dir=ltr style="MARGIN-RIGHT: 0px"><BR>>      aux->seguent = nou_node; //asignacion invalida;<BR>><BR>>}</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">Entonces en conclusion los errores que tienes son la declaracion de parametros de la funcion, tienes un potencial loop infinito, y ademas las asignaciones que quieres realizar no son posibles a menos que sobracargues el operador de asignacion para que supiera como pasar de tipo node a X o viceversa, son invalidas:</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">aux = aux->seguent; </P>
<P dir=ltr style="MARGIN-RIGHT: 0px">no valido, el compilador no sabe pasar del tipo que tengas la variable seguent a tipo node.</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">Tambien te olvidaste de liberar la memoria dinamica que creaste, debias haber añadido algo asi:</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">delete nou_node;</P></FONT></div><br clear=all><hr>¿Cuánto vale tu auto? Tips para mantener tu carro. ¡De todo en MSN Latino Autos! <a href="http://g.msn.com/8HMBESUS/2734??PS=47575" target="_top">Clic aquí</a> </html>