0

我有一个带有一个类和几个声明和非静态成员函数的头文件,如下所示:

    //foo.h
    ...
    #include <bar.h>

    class foo
    {
        ...
        public:
            void myFunction();
    };

以及带有结构和类的头文件,例如:

    //bar.h
    ...
    struct baz
    {
         class foo;
         ...
         void (foo::*functionPointer)() = NULL;
    }

    class bar
    {
        ...
        public:
            static myOtherFunction();
    };

我想解决 bar.cpp 的静态函数“myOtherFunction”中的函数指针,例如:

    void bar::myOtherFunction()
    {
        ...
        baz b = baz();
        b.functionPointer = &foo::myFunction;
    }

但这给我一个编译器错误:

    bar.cpp:247:22: error: cannot convert 'void (foo::*)()' to 'void baz::foo::*)()' in assignment
          b.functionPointer = &foo*:myFunction;
    Error compiling

可以肯定的是,对于任何有 c/c++ 经验的人来说,这都是一个明显的错误,但现在我被困住了,非常感谢一些帮助。谢谢...

4

1 回答 1

0

如果您可以访问编译器中的 C++11 库/类,请包含该functional库。说明在这里。它将展示一种制作完全“打包”对象的方法,这些对象引用了您想要的方法和类实例。

如果没有,请非常仔细地阅读 C++ FAQ的Pointers to Members部分。作为语言的核心部分,所有地方都支持这一点。

祝你好运。

于 2015-06-30T12:42:55.613 回答