Ссылка на нестационарную функцию-член должна быть вызвана
Я использую С++ (не С++ 11). Мне нужно сделать указатель на функцию внутри класса. Я стараюсь сделать следующее:
void MyClass::buttonClickedEvent( int buttonId ) {
// I need to have an access to all members of MyClass class
}
void MyClass::setEvent() {
void ( *func ) ( int );
func = buttonClickedEvent; // <-- Reference to non static member function must be called
}
setEvent();
Но есть ошибка: "Ссылка на нестационарную функцию-член должна быть вызвана". Что делать, чтобы сделать указатель на член MyClass?
Ответы
Ответ 1
Проблема заключается в том, что 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
Ответ 2
Возможно, вам стоит взглянуть на https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types, особенно [33.1]. Является ли тип "функция-указатель-член" "отличается от" указатель на функцию "?