Heim >Backend-Entwicklung >C++ >Warum verursacht mein Konstruktor ohne Argumente einen Kompilierungsfehler?

Warum verursacht mein Konstruktor ohne Argumente einen Kompilierungsfehler?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 20:30:02327Durchsuche

Why Does My Constructor With No Arguments Cause a Compilation Error?

Die Verwirrung beseitigen: Die Syntax „Konstruktor ohne Argumente“ verstehen

Wenn Sie versuchen, ein Objekt mit einem Konstruktor ohne Argumente zu initialisieren, Programmierer können auf den rätselhaften Kompilierzeitfehler „error: request for member '<>'“ stoßen. in „<>“, das vom Nicht-Klassentyp „<>“ ist. Diese rätselhafte Nachricht rührt von einer syntaktischen Mehrdeutigkeit in C her.

Traditionell konnten in C Konstruktoren ohne Argumente auf zwei syntaktisch äquivalente Arten deklariert werden:

  1. MyClass myObj;
  2. Meine Klasse myObj();

Der Sprachstandard schreibt jedoch vor, dass eine Konstruktordeklaration mit leeren Klammern immer als Funktionsdeklaration interpretiert wird, sodass kein Platz für eine leere Konstruktorinitialisierung bleibt.

In Im Gegensatz dazu ist ein Initialisierer mit leeren Klammern in bestimmten Szenarios zulässig, z. B. beim Initialisieren einer Klasse in einem neuen Ausdruck oder beim Erstellen eines mit einem Wert initialisierten temporären Elements. Um den Analysefehler zu beheben und einen leeren Konstruktor zu definieren, müssen Programmierer daher die Klammern explizit ausschließen und schreiben:

MyClass myObj;

Diese Klarstellung beseitigt die Mehrdeutigkeit und stellt sicher, dass der Compiler die korrekt interpretiert Code als Objektdefinition mit einem leeren Initialisierer, damit das Programm erfolgreich kompiliert werden kann.

Das obige ist der detaillierte Inhalt vonWarum verursacht mein Konstruktor ohne Argumente einen Kompilierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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