2011-05-14 16 views
6

Quiero tener una clase que tiene como miembro de un puntero a una funciónC++ miembro de la clase puntero a la función global

aquí es el puntero de función:

typedef double (*Function)(double); 

aquí es una función que se ajusta a la definición puntero de función:

double f1(double x) 
{ 
    return 0; 
} 

aquí es la clase definion:

class IntegrFunction 
{ 
public: 
    Function* function; 
}; 

y en algún lugar de la función principal que quiero hacer algo como esto:

IntegrFunction func1; 
func1.function = f1; 

embargo, este código no funciona.

¿Es posible asignar a un miembro de la clase un puntero a una función global, declarado como se indicó anteriormente? ¿O tengo que cambiar algo en la definición del puntero a la función?

Gracias,

+0

¿De qué manera no funciona? –

+0

¿Cómo "no funciona"? ¿Obtiene un error de compilación? Si es así, ¿qué es? –

+0

La respuesta puede ser más fácil para nosotros encontrarla si nos proporciona un ejemplo completo. Estás * tan * cerca, solo necesitaría unas pocas líneas más para completarlo. Además, ¿puedes decirnos a qué te refieres con "no funciona"? ¿Recibes un error del compilador? ¿Linker? ¿Obtienes un comportamiento en tiempo de ejecución diferente de lo que esperas? –

Respuesta

9

Reemplazar esta:

class IntegrFunction 
{ 
public: 
    Function* function; 
}; 

con esto:

class IntegrFunction 
{ 
public: 
    Function function; 
}; 

Su typedef ya se crea un puntero a función. Declarar Function* function crea un puntero-a-puntero-a-función.

+0

+1 captura muy agradable. –

+0

Gracias, entendí mi error y mi código funciona ahora. Debería ser más cuidadoso la próxima vez. –

-3

Es necesario utilizar el operador de dirección para obtener un puntero de función en el estándar de C++ 03.

func1.function = &f1; 
+2

No, no es así.El 'y' es necesario para tomar la dirección de una función miembro pero no para una función que no sea miembro. –

4

basta con sustituir

Function* function; 

a

Function function; 
2

se declara la variable como Function* function, pero el Function typedef ya es un typedef para un puntero. Entonces, el tipo del puntero de función es solo Function (sin el *).

0

Reemplazar

typedef double (*Function)(double); 

por

typedef double Function(double); 

a typedef el tipo de función. Luego puede escribir el * cuando lo usa.

Cuestiones relacionadas