我试图将指向一个类中定义的函数的指针传递给另一个类.经过大量研究,我相信我的语法是正确的,但我仍然遇到编译器错误.以下是一些演示我的问题的代码:
class Base { public: BaseClass(); virtual ~BaseClass(); }; class Derived : public Base { public: // assign strFunction to the function pointer passed in Derived(string (*funPtr)(int)) : strFunction(funPtr); ~Derived(); private: // pointer to the function that is passed in string (*strFunction)(int value); }; class MainClass { public: MainClass() { // allocate a new Derived class and pass it a pointer to myFunction Base* myClass = new Derived(&MainClass::myFunction); } string myFunction(int value) { // return a string } };
当我尝试编译此代码时,我得到的错误是
错误:没有匹配函数来调用'Derived :: Derived(string(MainClass ::*)(int))'
其次是
注意:候选者是:Derived :: Derived(string(*)(int))
知道我可能做错了什么吗?
您的语法对于C样式函数指针是正确的.把它改成这个:
Derived(string (MainClass::*funPtr)(int)) : strFunction(funPtr) {}
和
string (MainClass::*strFunction)(int value);
记得要打电话strFunction
,你需要一个MainClass对象的实例.我经常觉得使用typedef很有用.
typedef string (MainClass::*func_t)(int); func_t strFunction;
和
Derived(func_t funPtr) : strFunction(funPtr) {}
您可以在此处了解有关C++成员函数指针语法的严重邪恶的更多信息.