2012-08-30 42 views
46

我想用成员函数指针做一些测试。这段代码有什么问题? bigCat.*pcat();语句不编译。如何通过成员函数指针调用?

class cat { 
public: 
    void walk() { 
     printf("cat is walking \n"); 
    } 
}; 

int main(){ 
    cat bigCat; 
    void (cat::*pcat)(); 
    pcat = &cat::walk; 
    bigCat.*pcat(); 
} 

回答

77

更多括号是必需的:

(bigCat.*pcat)(); 
^   ^

函数调用(())具有比指针到构件结合运算符(.*)更高的优先级。一元运算符优先于二元运算符。

+0

@AdrianCornish:没有,但'pcat'没有命名一个成员,它在'main'中声明了作为局部变量声明的指向成员的指针。 –

+0

你甚至可以称为这样的成员函数(从未尝试过) –

+2

@AdrianCornish:是的。 –