Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Das Durcheinander mit den Header-Dateien

Star / 2 Antworten / Baumansicht Nickles

Hi Leute!

Hat vielleicht einer von euch mal ein gescheites Konzept, wie man seine Header-Dateien zusammenbauen muss, damit der Linker einem nicht bei jeder 2. Änderung an den Hals springt???

Mein Problem ist, dass ich nicht genau weiss, wie ich die ganzen Dateien Organisieren soll.

Ich hab z. B. Folgende Dateien:
- Main.cpp
- Grafik.h
- Grafik.cpp
- Logik.h
- Logik.cpp
- Utility.h
- Utility.cpp
- Debug.h
- Debug.cpp

(Die Namen sollen nur so ungefähr wiederspiegeln, was da so drin ist . . . )

Die in "Utility" und "Debug" definierten Routinen sollen in ALLEN anderen zur Verfügung stehen.
"Logik" soll auf jeden Fall auf "Grafik" zugreifen können, und "Main" braucht "Logik" und "Grafik". . .

Immer wieder komme ich mit den Dateien durcheinander. Entweder die Sachen lassen sich nicht kompilieren (weil Teile nicht definiert sind) oder der Linker faselt von nicht aufgelösten Objekten oder doppelt definiertem Kram.

Klar ist mir schon, dass ich in der .CPP die jeweilige .H einfüge.
Aber was mach ich mit den weiteren .H-Dateien? Include ich die in der .H oder in der .CPP-Datei?
Und in welcher Reihenfolge, damit ich nichts doppelt habe und auch alles definiert ist?
Gibt es eventuell Pre-Compiler-Anweisungen die mir da helfen, und wenn ja, wie funktionieren die?

Ich hoffe, ihr könnt mir behilflich sein, mein Projekt besteht nämlich seit 2 Tagen aus hin-und-her-schieben von Includes . . .

bei Antwort benachrichtigen
thomas woelfer Star „Das Durcheinander mit den Header-Dateien“
Optionen

eigentlich ist das ganz einfach: zu beginn jeder include datei schreibst du folgendes statement hin:

#ifdnef _INC_NAME_DER_INCLUDE_DATEI
#define _INC_NAME_DER_INCLUDE_DATEI
// hier kommt der inhalt
#endif

dann inkludierst du einfach immer alles in den cpp dateien was du brauchst - und bei bedarf auch in den anderen headern. (d.h., wenn ein header definitionen aus einem anderen benoetigt.)

durch das preaeprozessor statement wird nichts zweimal definiert - nachdem die header aber in mehreren cpp files includiert werden (was normal ist) sollten sie keine instanzierungen enthalten... also nicht sowas wie:

static int _globale_variable_;

WM_HOPETHISHELPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
Star thomas woelfer „eigentlich ist das ganz einfach: zu beginn jeder include datei schreibst du...“
Optionen

Hi Thomas!

Klasse, doppelte Definitionen hab ich nun nicht mehr, das ist gut!!

Danke!

bei Antwort benachrichtigen