Gane.h bindet World.h ein, World.h bindet Mob.h ein, Mob.h wieder Game.h, Game.h wieder World.h usw.
Das geht so natürlich nicht, weil das nie enden würde.
CMob muss Game.h doch garnicht kennen.
Dieses Verhalten sollte doch der Ausdruck "#pragma once" unterdrücken bzw. vermeiden, oder?
Ja, und genau das ist der Grund für den Fehler. Denn #pragma once tut genau wofür es gedacht ist: Es bricht den Zyklus. Das führt nun aber dazu, dass CMob an der entsprechenden Stelle nicht definiert ist. #pragma once bzw. Includeguards dienen dazu, Mehrfachdefinitionen als Folge vom mehrfachen inkludieren der selben Datei zu verhindern. Es ist kein Freibrief dafür, einfach ohne nachzudenken überall alles zu inkludieren...
@Topic:
Den Fehler hat ich auch schon oft und den sieht man auf den ersten Blick einfach nicht: Es Fehlt irgentwo ein Semicolon.
Bei dir wahrscheinlich an dieser Stelle (Funktionsdekleration so beabsichtigt?):
|
Quellcode
|
1
2
3
|
class CMob
...
void Move () {};
|
Das ; ist an dieser Stelle nicht notwendig. Der Fehler hier ist ganz klar das zyklische #include, das sieht man daran:
|
Quellcode
|
1
|
Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
|
Der Compiler sagt, dass er den angegebenen Typ, also CMob, nicht kennt.