为什么以下代码会导致错误:
class A {
public:
typedef void (A::*funptr)(void);
void fun(void ) {
cout << " Fun Call " <<endl;
}
void foo(void ) {
cout << " Foo Call " <<endl;
}
funptr p[2];
funptr q;
A()
{
p[0]=&A::foo;
p[1]=&A::fun;
q =&A::fun;
}
};
int main ()
{
A obj;
(obj.*q)(void);
//(obj.p[0])();
//(obj.p[1])();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您需要像这样调用它:
(obj.*obj.q)();
Run Code Online (Sandbox Code Playgroud)
.*运算符不在右侧使用成员名称,而是在计算成员指针的表达式.当你写这个:
(obj.*q)();
Run Code Online (Sandbox Code Playgroud)
它正在寻找一个名为q的变量,但是范围内没有这样的变量.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |