尝试调用成员函数的函数指针时的编译时错误

时间:2017-11-09 13:50:32

标签: c++ member-function-pointers

以下是使用指向成员函数的指针的示例:

int main(){

     struct A {
        void Foo(){
            std::cout << "A::Foo()" << std::endl;
        }
    };

    void (A::*pFunc)() = &A::Foo;

    A a;
    (a.*pFunc)(); // works fine

    A a2();
    pFunc = &A::Foo;
    (a2.*pFunc)(); // This doesn't work?


    return 0;
}

如果我在没有class A的情况下声明()的对象,它可以正常工作但如果我用它声明它不起作用?

我收到此错误:

Severity    Code    Description Project File    Line
Error   C2296   '.*': illegal, left operand has type 'main::A (__cdecl *)(void)'    ConsoleApplication3 c:\users\raindrop7\desktop\consoleapplication3\consoleapplication3\consoleapplication3.cpp  89

1 个答案:

答案 0 :(得分:-2)

花括号初始化{}称为initialiser_list,在C ++中是首选,因为它可以防止一些明显的错误。例如

char ch = 1234; // compiles.. though overflows

char ch1 {1234}; // compilation error

代码

 A a2();

构造a2,好像我们正在调用一个函数...因此编译它无法用这个函数指针调用