<p>No me gusta ese:</p>
<p>*siguiente=nodo;</p>
<p>Sobreescribes información al desreferenciar.</p>
<p>Sigue buscando....gggg</p>
<p>Salu2<br>
El 01/05/2012 22:11, "Steven Davidson" <<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>> escribió:<br>
><br>
> Hola Redondo,<br>
><br>
><br>
> On 5/1/2012 3:05 PM, <a href="http://redondo.af">redondo.af</a> wrote:<br>
>><br>
>> Buenas tardes:<br>
>><br>
>> Estoy implementado una cola y tengo un error en la compilación cuando<br>
>> defino en la clase clsNodo.cpp la función:<br>
>><br>
>> void nodo::setSiguiente(nodo&val)<br>
>> { this->siguiente = val; }<br>
>><br>
>> Los errores son:<br>
>><br>
>> 19 clsNodo.cpp prototype for `void nodo::setSiguiente(nodo&)' does<br>
>> not match any in class `nodo'<br>
>> 17 clsCola.h void nodo::setSiguiente(nodo)<br>
>><br>
>> 19 clsNodo.cpp In member function `void<br>
>> nodo::setSiguiente(nodo&)'cannot convert `nodo' to `nodo*' in<br>
>> assignment<br>
>><br>
>><br>
><br>
> Tal y como indican los mensajes, no puede encontrar 'setSiguiente(nodo &)' ni tampoco puede realizar una asignación porque los tipos no concuerdan.<br>
><br>
> En primer lugar, escribes un prototipo de 'setsiguiente()' en "clsCola.h" así:<br>
><br>
> class nodo<br>
> {<br>
> public:<br>
>  void setSiguiente( nodo );<br>
>  ...<br>
> };<br>
><br>
> Pero en su implementación, sólo aparece esta definición en "clsNodo.cpp":<br>
><br>
> void nodo::setSiguiente( nodo &val )<br>
><br>
> Los prototipos NO concuerdan así que estás intentando sobrecargar esta función miembro, pero no has declarado esta versión dentro de la clase 'nodo'.<br>
><br>
> La solución es usar el mismo prototipo para la definición. Sin embargo, aconsejo usar 'const nodo &'; esto es,<br>
><br>
> class nodo<br>
> {<br>
> public:<br>
>  void setSiguiente( const nodo &val );<br>
>  ...<br>
> };<br>
> ...<br>
> void nodo::setSiguiente( const nodo &val )  {...}<br>
><br>
> En cuanto al segundo error, la asignación que intentas hacer es la siguiente:<br>
><br>
> void nodo::setSiguiente( nodo &val )<br>
> {<br>
>  this->siguiente = val;<br>
> }<br>
><br>
> Si nos fijamos en los tipos de dato estás intentando hacer esto:<br>
><br>
> <nodo *> = <nodo><br>
><br>
> No hay ninguna regla semántica para la asignación que acepte valores de estos tipos.<br>
><br>
> Basándome en 'getSiguiente()', creo que la solución es acceder al nodo apuntado por 'siguiente' y asignar el nuevo valor de 'val'; esto es,<br>
><br>
> void nodo::setSiguiente(nodo &val)<br>
> {<br>
>  *siguiente = val;<br>
><br>
> }<br>
><br>
>><br>
>> Os pongo a continuación el código correspondiente a las distintas<br>
>> clases que forman el programa.<br>
>><br>
>> Antes de nada dar las gracias a Steven por su aportación a este foro,<br>
>> sin ella yo no hubiese podido llegar hasta aquí. ;-)<br>
>><br>
><br>
> De nada; para eso estoy. De todas maneras, soy uno más en la lista; hay muchos socios y socias que también ayudan.<br>
><br>
><br>
> Espero que lo anterior te sirva.<br>
><br>
> Steven<br>
><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">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">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</p>