[C con Clase] Duda con estructura dinamica

ori_ganduxe Ganduxé Pregona oriol_ganduxe en hotmail.com
Mie Ago 15 14:29:06 CEST 2007







 
Muchas gracias Karina por responder, y aunque lo que dices sobre el uso de un puntero seguido de una referencia (*&p) realmente no parece muy logico, si no lo hago así el programa no funciona correctamente. Con la funcion de insertar_al_principio, mostrar y ordenar me ha funcionado bien. Entonces el problema no se alla allí, y no entiendo que querias decir con lo de la asignacion invalida de (aux->seguent = nou_node), ¿no es eso correcto? 
Si alguien tiene una respuesta se lo agradeceré mucho. 
>void insertar_al_final(struct node *&p){>>node *nou_node;>node *aux = p;>>nou_node = new node;>>      cout << "Inserta el valor: ";>      cin >> nou_node->numero;>>      nou_node->seguent = NULL;>>      while(aux->seguent != NULL)         aux = aux->seguent;>>      aux->seguent = nou_node;>>}

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í:
void insertar_al_final(node *&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:
void insertar_al_final(node *p){...} // pasa un puntero apuntando a una variable de tipo node
en caso de que la variable que vayas a pasar a la funcion no sea un puntero deberias declararla de la siguiente forma:
void insertar_al_final(node &p){...} //pasa una referencia de una variable de tipo node
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.
Luego:
>node *nou_node; //declara un puntero a una variable de tipo node>node *aux = p; /*declara un puntero que apunta a la misma direccion que p,por lo > que modificaciones  permaneceran*/
>nou_node = new node; //reserva espacio para una variable de tipo node>>      cout << "Inserta el valor: ";>      cin >> nou_node->numero; //numero guarda el valor que se inserte, ya sea en tipo int o char[] no lo se>>      nou_node->seguent = NULL; //el puntero a char(a menos eso supongo) seguent es una cadena vacia>>      while(aux->seguent != NULL)         aux = aux->seguent; 
loop infinito a menos que p->seguent contenga una cadena no nula, ademas la asignacion es invalida
>      aux->seguent = nou_node; //asignacion invalida;>>}
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:
aux = aux->seguent; 
no valido, el compilador no sabe pasar del tipo que tengas la variable seguent a tipo node.
Tambien te olvidaste de liberar la memoria dinamica que creaste, debias haber añadido algo asi:
delete nou_node;

¿Cuánto vale tu auto? Tips para mantener tu carro. ¡De todo en MSN Latino Autos! Clic aquí 
_________________________________________________________________
¡Ya está aquí Windows Live Spaces! Ahora podrás crear fácilmente tu propio sitio Web.
http://spaces.live.com/signup.aspx
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070815/4ab67640/attachment.html>


Más información sobre la lista de distribución Cconclase