必须调用对非静态成员函数的引用

时间:2014-10-13 01:04:42

标签: c++ pointers reference

我使用的是C ++(不是C ++ 11)。我需要在类中创建一个指向函数的指针。我尝试做以下事情:

void MyClass::buttonClickedEvent( int buttonId ) {
    // I need to have an access to all members of MyClass's class
}

void MyClass::setEvent() {

    void ( *func ) ( int ); 
    func = buttonClickedEvent; // <-- Reference to non static member function must be called

}

setEvent();

但是有一个错误:&#34;必须调用对非静态成员函数的引用&#34;。如何制作指向MyClass成员的指针?

2 个答案:

答案 0 :(得分:26)

问题是buttonClickedEvent是一个成员函数,你需要一个指向成员的指针才能调用它。

试试这个:

void (MyClass::*func)(int);
func = &MyClass::buttonClickedEvent;

然后当你调用它时,你需要一个MyClass类型的对象来做,例如this

(this->*func)(<argument>);

http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm

答案 1 :(得分:8)

您可能需要查看https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types,尤其是 [33.1]“指向成员函数的指针”的类型是否与“指向函数的指针”不同?