Доступ к указателю на функцию внутри класса - PullRequest
4 голосов
/ 30 марта 2012

Я определяю указатель функции внутри класса и пытаюсь получить к нему доступ через экземпляр класса, но он показывает ошибку.

Вот код:

 1 #include<stdio.h>
 2 
 3 class pointer {
 4 public:
 5    int (pointer::*funcPtr)(int);
 6    pointer() {
 7       funcPtr = &pointer::check;
 8    }
 9 
10 
11    int check(int a)
12    {
13       return 0;
14    }
15 
16 };
17 
18 int main()
19 {
20    pointer *pt=new pointer;
21    return (pt->*funcPtr)(3);
22 }

Показываетошибка времени компиляции:

checkPointer.cpp:21:15: error: ‘funcPtr’ was not declared in this scope

, пожалуйста, помогите мне.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Проблема здесь в том, что funcPtr объявлен внутри pt, поэтому вам нужно использовать имя pt дважды - один раз в качестве левой части выбора указателя на член и один раз, чтобы выбрать класс указателя из какой выбрать funcPtr:

(fn->*(fn->funcPtr))(3);

Причина этого заключается в том, что вы потенциально можете вызвать функцию, на которую указывает член funcPtr одного экземпляра указателя на другой экземпляр указателя.

Надеюсь, это поможет!

1 голос
/ 30 марта 2012

Я собираюсь предложить вам следовать инструкциям из C ++ FAQ . Обычно этот автор избегает typedef с и #define с, но для этого случая он делает исключение:

#define CALL_MEMBER_FN(object,ptrToMember)  ((object).*(ptrToMember))
…
    CALL_MEMBER_FN(*pt, pt->funcPtr)(3)

P.s. Даже если вы не будете следовать этим инструкциям, прочитайте эту страницу. Он содержит множество полезной информации об указателях на функции-члены.

1 голос
/ 30 марта 2012

Я думаю, вы имели в виду

pt->*(pt->funcPtr)(3);
...