Heim > Backend-Entwicklung > C++ > Warum funktioniert „Foo foo2();' Verursachen Sie einen Fehler „Anfrage für Mitglied in Nicht-Klassentyp'?

Warum funktioniert „Foo foo2();' Verursachen Sie einen Fehler „Anfrage für Mitglied in Nicht-Klassentyp'?

Barbara Streisand
Freigeben: 2024-12-01 01:22:11
Original
472 Leute haben es durchsucht

Why Does

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();
Nach dem Login kopieren

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;
Nach dem Login kopieren

Durch Weglassen der Klammern interpretiert der Compiler

Foo foo2
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage