Wenn ich einen Mitgliedsfunktionszeiger an eine Klasse innerhalb einer der Mitgliedsfunktionen dieser Klasse zurückgebe, muss ich noch die Klasse angeben. Ich kann die Adresse nicht einfach nehmen. Zum Beispiel this code works fine:Warum erfordert die Verwendung eines Mitgliedsfunktionszeigerwerts die Klassennamenqualifizierung auch innerhalb der Klasse?
class Foo {
public:
void func(int param) { cout << param << endl; }
void (Foo::*getPointer())(int) { return &Foo::func; }
};
Aber wenn in getPointer
Ich versuche einfach tun: return &func
ich diesen Fehler:
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; }
Warum ich die Klasse angeben muß, wenn das ist der Kontext, den ich in bin?
@JoachimPileborg Scope offensichtlich. Wenn es eine Nichtmitgliedsvariable mit demselben Namen wie die Klassenvariable gibt, muss ich die Klasse nicht angeben. –
Ah ich habe deine Frage missverstanden, du fragst nach der Notwendigkeit von 'Foo ::' in '& Foo :: func'. –
@JoachimPileborg Ja, es macht mich verrückt, warum der Compiler das nicht herausfinden kann. Ich muss nicht für statische Funktionen, Elementvariablen, beim Aufrufen von Funktionen oder sogar für die Adresse einer Membervariablen angeben. aber aus irgendeinem Grund, wenn ich die Adresse einer Funktion möchte ich angeben. –