[C con Clase] duda apuntador a void

Pedro Pablo Peña Serrano pedrop2005 en gmail.com
Mar Mayo 24 14:20:47 CEST 2011


El 24/05/11, omar mendoza <omar.p9 en gmail.com> escribió:
> Hola lista, alguien me podría orentar sobre esto:
>
> Tengo un apuntador
>
> void *p;
>
> y si por ejemplo tengo una clase Numero y hago esto
>
> Numero *num = new Numero;
>
> puedo hacer esto??
>
> (Numero *) p = #
>
> o algo parecido, para que el apuntador p pueda accesar a los metodos de num
> ??
>
> es que tengo esto
>
> int main(int argc, const char *argv[])
> {
> void *p;
>
> Numero *num = new Numero;
>
> (Numero*)p = #
>
> return 0;
> }
>
> y me sale este error
>
>
> omar en debian:~/altec_temp/map$ g++-4.6 void.cpp -o void
> void.cpp: In function ‘int main(int, const char**)’:
> void.cpp:10:16: error: lvalue required as left operand of assignment
>
>
> donde la línea 10 es
>
> (Numero*)p = #
>
> Saludos!!!
> --
> Omar Jonathan Mendoza Bernal
> "Las cicatrices nos recuerdan que el pasado fue real" Dr. Lecter en Dragón
> Rojo
>


Hola en la declaración (Numero *) p = # quita el & y te
funcionará, num es un variable de tipo puntero a Numero, así que no
hace falta (en este caso) usar el operador de direccionamiento y si lo
pones sintacticamente no está correcto,   (Numero *) p = num; así te
funcionará, y aunque no está mal la declaración (Numero *) p = num; no
es necesario hacer el casting en este momento, recuerda que p es una
variable de tipo puntero a void, o sea un apuntador genérico y se le
puede asignar cualquier puntero o dirección de memoria, luego cuando
quieras leer la información que está en la zona de memoria a la cual
apunta tu puntero, pues haces el casting adecuado y lees lo que tengas
que leer. Espero te haya ayudado.

Salu2 !!!




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