Überladene Konstruktoren und Zugriffsfehler auf Klassenmitglieder
Stellen Sie sich eine Klasse mit zwei Konstruktoren vor, einen ohne Argumente und einen anderen mit einem einzelnen ganzzahligen Argument. Während das Erstellen von Objekten mit dem letztgenannten Konstruktor wie vorgesehen funktioniert, führt die Verwendung des Konstruktors ohne Argumente zu einem Fehler.
Zum Beispiel wird beim Kompilieren des folgenden Codeausschnitts:
class Foo { public: Foo() {}; Foo(int a) {}; void bar() {}; }; int main() { // This works... Foo foo1(1); foo1.bar(); // This fails... Foo foo2(); foo2.bar(); return 0; }
der folgende Fehler generiert :
error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
Dieser Fehler tritt auf, weil der Compiler den Code Foo foo2(); interpretiert. als Funktionsdeklaration mit dem Namen „foo2“ und dem Rückgabetyp „Foo“. Sie beabsichtigen jedoch, ein Objekt vom Typ „Foo“ mit dem Konstruktor ohne Argumente zu instanziieren.
Um dieses Problem zu beheben, ändern Sie Foo foo2(); zu Foo foo2;. Diese Änderung informiert den Compiler darüber, dass Sie ein Objekt mit dem Standardkonstruktor erstellen möchten.
Alternativ kann ein Fehler auftreten, der auf Mehrdeutigkeit in überladenen Konstruktoren hinweist, da sowohl der Konstruktor ohne Argument als auch der Konstruktor mit einem Argument vorhanden sind . In solchen Fällen kann der explizite Aufruf des Konstruktors ohne Argumente mit Foo foo2{}; wird die Unklarheit beseitigen.
Das obige ist der detaillierte Inhalt vonWarum verursacht mein Konstruktor ohne Argumente den Fehler „Request for Member'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!