以下是使用指向成员函数的指针的示例:
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
答案 0 :(得分:-2)
花括号初始化{}
称为initialiser_list,在C ++中是首选,因为它可以防止一些明显的错误。例如
char ch = 1234; // compiles.. though overflows
char ch1 {1234}; // compilation error
代码
A a2();
构造a2
,好像我们正在调用一个函数...因此编译它无法用这个函数指针调用