Ошибка указателя на функцию-член - PullRequest
0 голосов
/ 22 ноября 2011

Я реализовал класс, как показано ниже. В конструкторе я получаю ошибку компиляции. Ребята, скажите, пожалуйста, почему?

class A{

public:
    typedef void (A::*HANDLER)();
    void test1(){
        printf("This is test 1");
    }
    void test2(){
        printf("This is test 2");
    }

    A(){
        HANDLER h= &A::test1; 
        h(); // an error spawn here with the description: term does not evaluate to a function taking 0 arguments
    }
};

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011

Сообщение об ошибке g++ более информативно:

bar.cc: In constructor 'A::A()':
bar.cc:15:11: error: must use '.*' or '->*' to call pointer-to-member function in 'h (...)', e.g. '(... ->* h) (...)'

И действительно, если вы измените свой вызов на (this->*h)();, он пройдет компилятор.

0 голосов
/ 22 ноября 2011

Вы должны использовать указатель на член-оператор ->* следующим образом:

(this->*h)(); 

Онлайн-демонстрация вашего примера кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...