Heim > Backend-Entwicklung > C++ > Warum erhalte ich die Fehlermeldung „Default Member Initializer Required' und was kann ich dagegen tun?

Warum erhalte ich die Fehlermeldung „Default Member Initializer Required' und was kann ich dagegen tun?

Patricia Arquette
Freigeben: 2024-10-29 19:03:29
Original
1076 Leute haben es durchsucht

 Why Do I Get a

Compiler-Fehlermeldung verstehen: „Standard-Member-Initialisierer vor dem Ende seiner umschließenden Klasse erforderlich“

Wenn Sie mit der Compiler-Fehlermeldung konfrontiert werden „ Da der Standard-Member-Initialisierer vor dem Ende seiner umschließenden Klasse erforderlich ist, ist es wichtig, sich mit dem Code zu befassen und das zugrunde liegende Problem zu verstehen. Dieser Fehler tritt in Szenarien auf, in denen ein Standard-Member-Initialisierer für ein Klassenmitglied in der Klassendefinition fehlt.

Compiler-Verhalten: A Tale of Three

Der betreffende Code , das die Downloader-Klasse und ihre verschachtelte Hints-Struktur enthält, weist bei Compilern ein unterschiedliches Verhalten auf. Während MSVC2017 es erfolgreich kompiliert, lösen GCC8.2 und Clang7.0 den oben genannten Fehler aus. Diese Diskrepanz ist auf das Fehlen eines Standard-Member-Initialisierers für die Hints-Struktur zurückzuführen.

Enthüllung der Grundursache

Entkommentieren der Zeile Hints(){} innerhalb der Hints-Struktur Behebt das Problem für alle drei Compiler. Diese Zeile stellt im Wesentlichen einen leeren Konstruktor bereit, der die Anforderung für einen Standard-Member-Initialisierer erfüllt. Das Auskommentieren von Hints() = default; führt zu einem Kompilierungsfehler bei Clang und GCC, aber nicht bei MSVC.

Ein Blick in den Fehler

Dieses Verhalten kann auf einen Fehler in Clang und GCC zurückgeführt werden . Ein Fehlerbericht (https://bugs.llvm.org/show_bug.cgi?id=41303) zeigt ein ähnliches Problem und zeigt eine ähnliche Fehlermeldung an. Der Bericht legt nahe, dass das Problem in der verzögerten Analyse von Standard-Member-Initialisierern in bestimmten Kontexten liegt, was dazu führt, dass die Compiler den Code falsch interpretieren.

Schlussfolgerung

Sollte ein solcher Compiler vermieden werden Bei Fehlern muss unbedingt sichergestellt werden, dass für alle Klassenmitglieder mit Standardwerten in der Klassendefinition explizite Standardmitgliedsinitialisierer definiert sind. Diese Vorgehensweise stellt ein konsistentes Kompilierungsverhalten über verschiedene Compiler hinweg sicher und trägt dazu bei, unerwartete Fehler während der Codeentwicklung zu verhindern.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Default Member Initializer Required' und was kann ich dagegen tun?. 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