Class Deklaration
-
wenn ich in einer Datei definiere
class foo { }dann speichere unter foo.hxx
implementiere die entsprechende foo.cpp
manchmal in main.cpp muss man includieren#include "foo.h"manchmal aber nur
class foo;was ist der Unterschied?
-
Der Unterschied ist dass das zweite ohne das erste nicht funktioniert :p
-
google mal nach forward declaration
-
ich nehme mal an, was
#include <foo.h>bedeutet ist klar.
class foo;ist, wie schon gesagt, eine forward-deklaration. sie teilt dem compiler mit, daß foo ein klassenname ist, ohne dem compiler jedoch etwas über den inhalt zu verraten. man kann dann zeiger oder referenzen auf foo deklarieren. sowas ist nützlich, wenn man zwei strukturen oder klassen hat, die gegenseitig zeiger aufeinander enthalten
wenn du
class foo { bar *x; }; class bar { foo *x; };kompilierst, dann gibt es einen fehler, weil der compiler bar *x nicht versteht. bar wird ja erst hinterher deklariert. und wenn du die reihenfolge der deklarationen von foo und bar vertauscht, dann hast du das selbe problem wieder, nur mit foo *x.
die lösung des problems ist
class bar; // forward-deklaration von bar class foo { bar *x; // jetzt kennt der compiler bar }; class bar { foo *x; // und foo sowieso };
-
Konfusius schrieb:
sowas ist nützlich, wenn man zwei strukturen oder klassen hat, die gegenseitig zeiger aufeinander enthalten
kann man in headern eigentlich immer verwenden wenn der include nicht nötig ist. das spart bei großen projekten compilezeit, die header kann man dann den implementatinsdateien includen.