[C con Clase] Problema de compilación en una función con punteros

Samuel Díaz García samueldg en arcoscom.com
Mie Mayo 2 22:25:39 CEST 2012


No me gusta ese:

*siguiente=nodo;

Sobreescribes información al desreferenciar.

Sigue buscando....gggg

Salu2
El 01/05/2012 22:11, "Steven Davidson" <srd4121 en njit.edu> escribió:
>
> Hola Redondo,
>
>
> On 5/1/2012 3:05 PM, redondo.af wrote:
>>
>> Buenas tardes:
>>
>> Estoy implementado una cola y tengo un error en la compilación cuando
>> defino en la clase clsNodo.cpp la función:
>>
>> void nodo::setSiguiente(nodo&val)
>> { this->siguiente = val; }
>>
>> Los errores son:
>>
>> 19 clsNodo.cpp prototype for `void nodo::setSiguiente(nodo&)' does
>> not match any in class `nodo'
>> 17 clsCola.h void nodo::setSiguiente(nodo)
>>
>> 19 clsNodo.cpp In member function `void
>> nodo::setSiguiente(nodo&)'cannot convert `nodo' to `nodo*' in
>> assignment
>>
>>
>
> Tal y como indican los mensajes, no puede encontrar 'setSiguiente(nodo
&)' ni tampoco puede realizar una asignación porque los tipos no concuerdan.
>
> En primer lugar, escribes un prototipo de 'setsiguiente()' en "clsCola.h"
así:
>
> class nodo
> {
> public:
>  void setSiguiente( nodo );
>  ...
> };
>
> Pero en su implementación, sólo aparece esta definición en "clsNodo.cpp":
>
> void nodo::setSiguiente( nodo &val )
>
> 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'.
>
> La solución es usar el mismo prototipo para la definición. Sin embargo,
aconsejo usar 'const nodo &'; esto es,
>
> class nodo
> {
> public:
>  void setSiguiente( const nodo &val );
>  ...
> };
> ...
> void nodo::setSiguiente( const nodo &val )  {...}
>
> En cuanto al segundo error, la asignación que intentas hacer es la
siguiente:
>
> void nodo::setSiguiente( nodo &val )
> {
>  this->siguiente = val;
> }
>
> Si nos fijamos en los tipos de dato estás intentando hacer esto:
>
> <nodo *> = <nodo>
>
> No hay ninguna regla semántica para la asignación que acepte valores de
estos tipos.
>
> 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,
>
> void nodo::setSiguiente(nodo &val)
> {
>  *siguiente = val;
>
> }
>
>>
>> Os pongo a continuación el código correspondiente a las distintas
>> clases que forman el programa.
>>
>> Antes de nada dar las gracias a Steven por su aportación a este foro,
>> sin ella yo no hubiese podido llegar hasta aquí. ;-)
>>
>
> De nada; para eso estoy. De todas maneras, soy uno más en la lista; hay
muchos socios y socias que también ayudan.
>
>
> Espero que lo anterior te sirva.
>
> Steven
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120502/a9af97ac/attachment.html>


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