在 class 中分配函数指针会在 C++ 中给出值类型错误
Assigning function pointer within a class gives value type error in C++
我在 Entity.h 中得到了这段代码,它被其他类继承了。这个想法是在继承类中可以更改函数以避免继承或修改行为。
public:
Entity(void)
{
updateFunction = emptyFunction;
};
~Entity(void);
protected:
void emptyFunction(){}
void (*updateFunction)();
问题是我在编译时遇到这个错误:
Error 2 error C2440: '=' : cannot convert from 'void (__cdecl Entity::* )(void)' to 'void (__cdecl *)(void)' c:\documents and settings\administrator\my documents\visual studio 2010\projects\projectname\[projectname]\Entity.h 16 1 [projectname]
教程又看了一遍,好久没学这些东西了,还是看不出有什么不一样,请问是哪里出了问题? IntelliSense 取消将“=”符号作为错误点。希望我没有漏掉任何东西。
提前致谢!!
您需要将指针函数声明为:
class Entity{
public:
Entity(void)
{
updateFunction = &Entity::emptyFunction;
// ...
(this->*updateFunction)(); //Call
};
~Entity(void);
protected:
void emptyFunction(){}
void (Entity::*updateFunction)();
};
事实上updateFunction
不是一个普通函数,它是一个class成员函数。
我在 Entity.h 中得到了这段代码,它被其他类继承了。这个想法是在继承类中可以更改函数以避免继承或修改行为。
public:
Entity(void)
{
updateFunction = emptyFunction;
};
~Entity(void);
protected:
void emptyFunction(){}
void (*updateFunction)();
问题是我在编译时遇到这个错误:
Error 2 error C2440: '=' : cannot convert from 'void (__cdecl Entity::* )(void)' to 'void (__cdecl *)(void)' c:\documents and settings\administrator\my documents\visual studio 2010\projects\projectname\[projectname]\Entity.h 16 1 [projectname]
教程又看了一遍,好久没学这些东西了,还是看不出有什么不一样,请问是哪里出了问题? IntelliSense 取消将“=”符号作为错误点。希望我没有漏掉任何东西。
提前致谢!!
您需要将指针函数声明为:
class Entity{
public:
Entity(void)
{
updateFunction = &Entity::emptyFunction;
// ...
(this->*updateFunction)(); //Call
};
~Entity(void);
protected:
void emptyFunction(){}
void (Entity::*updateFunction)();
};
事实上updateFunction
不是一个普通函数,它是一个class成员函数。