我试图将指向一个类中定义的函数的指针传递给另一个类.经过大量研究,我相信我的语法是正确的,但我仍然遇到编译器错误.以下是一些演示我的问题的代码:
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
}
};
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,我得到的错误是
错误:没有匹配函数来调用'Derived :: Derived(string(MainClass ::*)(int))'
其次是
注意:候选者是:Derived :: Derived(string(*)(int))
知道我可能做错了什么吗?
您的语法对于C样式函数指针是正确的.把它改成这个:
Derived(string (MainClass::*funPtr)(int)) : strFunction(funPtr) {}
Run Code Online (Sandbox Code Playgroud)
和
string (MainClass::*strFunction)(int value);
Run Code Online (Sandbox Code Playgroud)
记得要打电话strFunction,你需要一个MainClass对象的实例.我经常觉得使用typedef很有用.
typedef string (MainClass::*func_t)(int);
func_t strFunction;
Run Code Online (Sandbox Code Playgroud)
和
Derived(func_t funPtr) : strFunction(funPtr) {}
Run Code Online (Sandbox Code Playgroud)