如何通过成员函数指针调用成员函数?
问题描述:
我想通过成员函数指针调用成员函数。调用函数也是一个成员。如何通过成员函数指针调用成员函数?
class A;
typedef int (A::*memFun)();
class A
{
int P(){return 1;}
int Q(){return 2;}
int R(){return 3;}
int Z(memFun f1, memFun f2)
{
return f1() + f2(); //HERE
}
public:
int run();
};
int A::run()
{
return Z(P, Q);
}
int main()
{
A a;
cout << a.run() << endl;
}
我没有做正确,和我越来越无差错
main.cpp:15:19: error: must use '.*' or '->*' to call pointer-to-member function in 'f1 (...)', e.g. '(... ->* f1) (...)'
return f1() + f2(); //HERE
请出示正确的方式去做。
编辑 - 还有另外一个错误,这是其具有
return Z(&A::P, &A::Q);
答
(this->*f1)() + (this->*f2)();
Regar无论您是从课堂内部调用它,都必须明确指定要调用的对象(在此例中为this
)。还请注意需要括号。下面是错误的:
this->*f1() + this->*f2()
答
解决像这样:
(this->*f1)() + (this->*f2)()
+0
谢谢!那解决了它。但是我有另一个错误,我没有提到,但@Joachim回答了它。 – 2013-04-29 10:40:55
答
,你必须使用这个
(this->*f1)();
答
虽然你没有表现出来,你叫Z
时,以及最有可能有错误。
你需要调用这样的功能:
Z(&A::P, &A::Q)
+0
+1谢谢,解决我刚才要问的问题。 – 2013-04-29 10:42:08
+1谢谢,这是有效的。在看到编译器错误之后,我确实尝试了'this - > * f1()+ this - > * f2()',但是它没有工作。 – 2013-04-29 10:43:58