При возврате указателя функции-члена к классу в рамках одной из функций-членов этого класса мне все равно нужно указать класс. Я не могу просто взять адрес. Например, this code works fine:Почему для значения функции указателя функции требуется присвоение имени класса даже изнутри класса?
class Foo {
public:
void func(int param) { cout << param << endl; }
void (Foo::*getPointer())(int) { return &Foo::func; }
};
Но если в getPointer
я стараюсь просто: return &func
я получаю эту ошибку:
prog.cpp: In member function '
void (Foo::* Foo::getPointer())(int)
':
prog.cpp:8:43: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&Foo::func
' [-fpermissive]
void (Foo::*getPointer())(int) { return &func; }
Почему я должен определить класс, когда это контекст, который я в?
@JoachimPileborg Область видимо. Если есть переменная, отличная от члена с тем же именем, что и переменная класса, мне не нужно указывать класс. –
А я неправильно понял ваш вопрос, вы спрашиваете о необходимости «Foo ::' в '& Foo :: func'. –
@JoachimPileborg Да, это заставляет меня болтать, почему компилятор не может понять это. Мне не нужно указывать статические функции, переменные-члены, когда я вызываю функции или даже беру адрес переменной-члена; но по какой-то причине, если я хочу указать адрес функции, которую я должен указать. –