无法在类之间传递指向函数的指针

Chr*_*ris 6 c++

我试图将指向一个类中定义的函数的指针传递给另一个类.经过大量研究,我相信我的语法是正确的,但我仍然遇到编译器错误.以下是一些演示我的问题的代码:

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))

知道我可能做错了什么吗?

Eva*_*ran 8

您的语法对于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)


Cra*_*rks 5

您可以在此处了解有关C++成员函数指针语法的严重邪恶的更多信息.