MVC++ Kompilliert <<falsch>> ??
-
Ich habe ein Projekt angefangen, ein Egoshooter zu programmieren.
Da ich alles schön ordnen wollte, tat ich die Initialisierung der Klasse in die game.h, die main.h included alles und die main.cpp enthält die WinMain.
Daneben enthalten die verschiedenen cpp dateien alle methoden der klasse. So gibt es z.B. die InitDirectx.cpp oder die RenderFrame.cpp...
So habe ich eigentlich alles richtig nur gibt mir VC++ 200 Fehler raus, die alle etwa mit "Nicht deklarierter bezeichner" Enden. Meine Vermutung ist, dass er nicht bei main.cpp zu kompillieren anfängt, sondern alle gleichzeitig zu Übersetzen anfängt. Wie kann ich das beheben?Gruß
PS: Was noch interressant währe, wenn ich alle cpp Dateien, außer die main in h Dateien umändern würde, geht es...
-
cbacon93 schrieb:
Meine Vermutung ist, dass er nicht bei main.cpp zu kompillieren anfängt, sondern alle gleichzeitig zu Übersetzen anfängt. Wie kann ich das beheben?
Ich denke, der Fehler kommt einfach daher, dass du ein Chaos mit Headern und Includes hast. Wieso soll z.B. Main.h alles inkludieren? Sowas führt meist nur zu unnötigen Abhängigkeiten und erhöhter Kompilierzeit.
Schau am besten, wo die einzelnen Fehler entstehen und stelle sicher, dass jeweils der benötigte Header eingebunden wird. Achte auch so gut es geht darauf, keine Header einzubinden, die du nicht brauchst, ansonsten schränkst du dich nur selbst ein.
-
nein, das ist es nicht. Ich habe die cpp dateien einfach zu h dateien umbenannt und den entsprechenden änderungen in der main.h (von .cpp zu .h) gemacht und so lief es einwandfrei... Jetzt stellt sich mir dir frage: wieso kann ich sie nicht .cpp benennen?
-
Das #include ist eine einfache Textersetzung. Der Inhalt der .h Datei wird vor dem Kompilieren einfach an diese Stelle eingefügt. Wenn du also nur eine .cpp hast und dort alles andere inkludierst hast du am Ende eine riesige Datei in der alles steht. Da hast du natürlich kein Problem das Bezeichner unbekannt sind, aber du baust dir so sehr schnell Namenskonflikte ein. Außerdem dürfte das um einiges länger brauchen beim Kompilieren.
Wenn du mehrere .cpp hast, dann werden diese erstmal alle unabhängig voneinander kompiliert und später zusammen gelinkt. Das heißt das ein Bezeichner der in der main.cpp bekannt ist nicht in den anderen .cpp bekannt sein muss. Deswegen erstellt man einen Header in dem nur die Deklaration drin steht. Diesen inkludiert man dann in alle .cpp in denen dieser benutzt wird.
-
ok danke hab jetzt kapiert wie sowas funktioniert
Jetzt habe ich aber noch ein problem...die main.h enthält jetzt alle includes zu headern wie windows.h und alle globalen konstanten. ich includiere die main.h also in der main.cpp und in der game.h (klassendefintion) ... nun brauche ich aber die klasse in der game.h, da ich in der main.cpp ein objekt von ihr erstellen möchte... wie mache ich das?
-
Wenn Du main.h in game.h includest, dann kannst Du in man.cpp auch einfach nur game.h includen.
Dann kannst Du die Klasse aus game.h auch in main.cpp erzeugen.