Programación General > C/C++
Problema con puntero a función miembro
(1/1)
Demenus:
Bueno, resulta que estoy intentando crear un array con una estructura que almacene un nombre y una "función"
En Python estoy acostumbrado a que todo se guarde como una dirección de memoria y quede muy bonito y muy sencillo, pero con C++ estoy teniendo problemas a la hora de intentar guardar una función miembro dentro del campo para funciones de la estructura.
(Perdón si no me expreso muy bien con los términos pero es que soy autodidacta y todavía no he llegado a distinguir esos matices del todo XDD
Bueno aquí les dejo el código que me tira el error en cuestión
--- Código: C++ ---#include<iostream>using namespace std; class foo { public: foo(); typedef struct { string nombre; void *funcion(); } lista_nombres; void function() { cout<<"hola mundo"<<endl; } void function2() { cout<<"hola mundo 2"<<endl; } lista_nombres list[2]; }; foo::foo(){ list[0].nombre="uno"; list[0].funcion=&function; list[1].nombre="dos"; list[1].funcion=&function2; list[0].funcion(); list[1].funcion();} int main(){ foo elemento();}
El error que me tira es este:
--- Código: Text ---prueba.cpp: In constructor ‘foo::foo()’:prueba.cpp:32: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say ‘&foo::function’prueba.cpp:32: error: invalid use of member (did you forget the ‘&’ ?)prueba.cpp:34: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say ‘&foo::function2’prueba.cpp:34: error: invalid use of member (did you forget the ‘&’ ?)
He intentado seguir las sugerencias del compilador pero... sin resultados.
Muchas gracias de antemano
Eternal Idol:
¿Usaste un miembro estatico como menciona ahi?
Demenus:
Sí lo usé, pero esto es una pruebita que estoy haciendo para un proyecto mayor, y el usar métodos estáticos me dificulta después el uso de miembros en el caso de instanciar varios objetos (o al menos eso creo, que podría haber cierto conflicto)
Aún así ya he resuelto mi duda utilizando un void (foo:: *funcion)(); en vez de void *funcion() como tenía.
Gracias de todas formas
Navegación
Ir a la versión completa