Sichtbarkeit von c ++ verschachtelten Klassen vollständige Definition im Präsidium von VorwärtsdeklarationenC++

Programme in C++. Entwicklerforum
Anonymous
 Sichtbarkeit von c ++ verschachtelten Klassen vollständige Definition im Präsidium von Vorwärtsdeklarationen

Post by Anonymous »

In C ++ führen Vorwärtsdeklarationen einen unvollständigen Typ ein. Unvollständige Typen können verwendet werden, um Zeiger zu deklarieren, aber sie können nicht zur Initialisierung von Werten oder Zugriffsmitgliedern verwendet werden, da die vollständige Definition nicht angegeben wurde. Betrachten Sie das folgende funktionierende Beispiel: < /p>

Code: Select all

struct C { // #1
// Forward declaration only
struct A; // #2
struct B {
// Pointer declaration is allowed with incomplete type
A* a;

int foo() {
// Member requires complete definition of A
return a->value;
}
};

// Complete definition of A given after B
struct A {
int value;
};

// Members and constructor
A a; B b;
C(int x) : a{x}, b{&a} {}
};

int main() {
C c{42};
return c.b.foo(); // returns 42
}
< /code>
Dieser Snippet kompilt erfolgreich mit G ++ und Clang. Scheinbar ist ein Tweak dazu führt, dass diese "Vorwärtsherkunft" auf die vollständige Definition von Struktur A 
fehlschlägt. Löschen der Vorwärtsdeklaration vollständig (d. H. Entfernen von #2 ) ergibt einen "unbekannten Typennamen" A '"Fehler. (Durchsuchen Sie das Repo nach MotionCompare , um vollständigere Beispiele anzuzeigen.) Hat sich die Gültigkeit dieser Konstruktion verändert, da sich der Sprachstandard entwickelt hat?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post