Visual Studio的非标准语法;使用'&'创建指向成员的指针

时间:2016-10-20 14:01:10

标签: c++ visual-studio function class pointers

我试图用函数指针调用函数,其中函数指针是类成员。

我简化了代码以仅显示问题,但原始代码中的foo()函数已经写入,所以我无法更改它。

(在我的实际代码中,foo来自GLFW(glfwSetKeyCallback),A是输入处理程序类。)

代码是:

    #include <iostream>

    // this four line can not be changed
    typedef void(*fptr)(int);
    void foo(fptr f) {
        f(0);
    }

    void testOutA(int i) {
    }

    class A {
    public:
        void testInA(int i) {
        }
    };

    int main()
    {
        foo(testOutA); // works fine as it should be

        A * a = new A();

        foo(a->testInA); // ERROR

        return 0;
    }

编译错误消息是:

  

错误:错误C3867:'A :: testInA':非标准语法;使用'&amp;'创建指向成员的指针

1 个答案:

答案 0 :(得分:2)

表达式a->testInA类型是指向非static成员函数的指针。

它与fptr的类型不同,因此编译器会发出错误,尽管是一个神秘的错误。

如果testInAstatic,则会通过编译。

有关详细信息,请参阅C++ function pointer (class member) to non-static member function