Ist die Zusammenstellung von g ++ wichtig?

8

Ich habe festgestellt, dass ich eine Kindklasse vor einer Elternklasse mit g ++ kompilieren konnte. Gibt es eine Notwendigkeit, in einer bestimmten Reihenfolge zu kompilieren, unter Berücksichtigung von Abhängigkeiten?

    
Cryo 10.04.2011, 23:35
quelle

5 Antworten

11

Verknüpfungsreihenfolge kann wichtig sein; Kompilierreihenfolge nicht.

    
ildjarn 10.04.2011, 23:38
quelle
3

Kurz gesagt: Nein!

Jede C ++ - Übersetzungseinheit (C ++ - Quelldatei) wird unabhängig kompiliert. Die Klassenvererbung usw. wird zur Laufzeit eingerichtet. Aus diesem Grund können Sie Basisklassen in separat verwalteten Bibliotheken verwenden, die aktualisiert werden können, ohne dass die Kompilierung von abgeleiteten Klassen erforderlich ist, solange die API und die ABI kompatibel bleiben.

    
thkala 10.04.2011 23:39
quelle
0

Um die Antwort von ildjarn zu erweitern, benötigt das Kompilieren der Implementierung einer Kindklasse nur die API / den Vertrag der Elternklasse, nicht die Implementierung. Das würde in einer Datei wie Parent.h liegen, die von den Dateien enthalten sein würde, die die Implementierung des Kinds enthalten.

    
QuantumMechanic 10.04.2011 23:43
quelle
0

Im Allgemeinen, nein. Der Compiler erstellt Symbole, die alles darstellen, was er nicht erkennt, aber ignorieren kann, und der Link wird diese Symbole in den richtigen Code umwandeln. In Ihrem Fall teilt der Header dem Compiler alles mit, was er wissen muss, um seine Kindklasse zu kompilieren, so dass die Details warten können.

    
Dennis Zickefoose 10.04.2011 23:44
quelle
0
  

... Ich konnte eine Kindklasse vor einer Elternklasse zusammenstellen ...

"Kompilieren" ist kein genau definierter Begriff, daher ist nicht genau klar, was Sie hier meinen. Aber im Allgemeinen, nein, Sie können keine Kindklasse vor der Elternklasse kompilieren. In C ++ muss der übergeordnete Typ complete sein, bevor Sie als Basisklasse für einen anderen untergeordneten Klassentyp verwendet werden können. Sie werden etwas falsch interpretiert oder dem Begriff "compile" eine eher unorthodoxe Bedeutung geben.

    
AnT 10.04.2011 23:53
quelle

Tags und Links