2013-04-29 180 views
11

我想通过成员函数指针调用成员函数。调用函数也是一个成员。如何通过成员函数指针调用成员函数?

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); 

回答

19
(this->*f1)() + (this->*f2)(); 

Regar无论您是从课堂内部调用它,都必须明确指定要调用的对象(在此例中为this)。还请注意需要括号。下面是错误的:

this->*f1() + this->*f2() 
+0

+1谢谢,这是有效的。在看到编译器错误之后,我确实尝试了'this - > * f1()+ this - > * f2()',但是它没有工作。 – 2013-04-29 10:43:58

4

解决像这样:

(this->*f1)() + (this->*f2)() 
+0

谢谢!那解决了它。但是我有另一个错误,我没有提到,但@Joachim回答了它。 – 2013-04-29 10:40:55

2

,你必须使用这个

(this->*f1)(); 
3

虽然你没有表现出来,你叫Z时,以及最有可能有错误。

你需要调用这样的功能:

Z(&A::P, &A::Q) 
+0

+1谢谢,解决我刚才要问的问题。 – 2013-04-29 10:42:08