当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《无法在类之间传递指向函数的指针》经验,为你挑选了2个好方法。

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

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

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



1> Evan Teran..:

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



2> Crashworks..:

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有