Konstruktor-Aufruffehler: „Anfrage nach Mitglied in Nicht-Klassentyp“ verstehen
Beim Instanziieren von Objekten mit bestimmten Konstruktorparametern können Programmierer auf Fehler stoßen der Fehler „Anfrage für Mitglied ‚..‘ in ‚..‘, das vom Nicht-Klassentyp ist.“ Um ihn effektiv beheben zu können, ist es wichtig, die Ursache dieses Fehlers zu verstehen.
Das bereitgestellte Codebeispiel veranschaulicht das Problem. Die Klasse Foo verfügt über zwei Konstruktoren: einen Standardkonstruktor ohne Argumente und einen Konstruktor, der einen einzelnen ganzzahligen Parameter akzeptiert. Instanziieren von foo1 mithilfe der parametrisierten Konstruktorfunktionen wie beabsichtigt. Der Aufruf des Standardkonstruktors führt jedoch zu einem Kompilierungsfehler.
Warum tritt das auf? Die Syntax
Foo foo2();
versteht sich fälschlicherweise als Funktionsdeklaration. Der Compiler nimmt es so wahr, als würde er eine Funktion namens foo2 mit dem Rückgabetyp Foo deklarieren und Argumente basierend auf den Klammern erwarten. Die Absicht besteht jedoch darin, ein Objekt namens foo2 mit dem Standardkonstruktor zu instanziieren, der keine Argumente akzeptiert.
Folglich bezeichnet der Compiler foo2 als Nicht-Klassentyp mit dem Namen Foo(). Diese Bezeichnung verhindert den Zugriff auf die in der Foo-Klasse definierten Methoden und macht damit den Aufruf von foo2.bar() ungültig.
Um diesen Fehler zu beheben, sollte die Syntax wie folgt angepasst werden:
Foo foo2;
Durch Weglassen der Klammern interpretiert der Compiler
Foo foo2
als Objektdeklaration von foo2 unter Verwendung des Standardkonstruktors. Dadurch wird ein Objekt vom Typ Foo erfolgreich instanziiert und ermöglicht den Zugriff auf seine Mitgliedsfunktionen, einschließlich bar().
Das obige ist der detaillierte Inhalt vonWarum funktioniert „Foo foo2();' Verursachen Sie einen Fehler „Anfrage für Mitglied in Nicht-Klassentyp'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!