Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.07.2012, 17:49

Präprozessor in Header-Datei

Hallo Leute und erneut brauche ich eure Hilfe. Ich bin mittlerweile im 8. Kapitel vom Buch C++ für Spieleprogrammierer angekommen und habe jetzt eine Frage bezüglich Präprozessoren in Header-Dateien. Ich habe folgende Präprozessoren gesetzt: #ifndef TSINGLETON und #define TSINGLETON, am Ende noch #endif. So, meines Wissens nach sorgen diese Präprozessoren dafür, dass man die nachfolgende Basisklasse, die TSingleton heisst, zuerst definiert und anschliessen aus jeder .cpp Datei aufrufen kann, ohne dass sie jedes weitere mal definiert wird.

Simmt das, also kompiliert der Compiler zuerst die Header-Datei und erst im Anschluss die .cpp-Dateien, denn meine Basisklasse hier erwartet noch ein Template, welche zu übergeben ist, darum die Frage. Ich weiss nicht ob zuerst die Header-Datei Definiert wird, wegen den Präprozessoren oder zuerst die cpp.

Meiner Meinung nach würde es ja gar nicht funktionieren, wenn man eine Basisklasse zuerst definiert, obwohl sie noch kein Template überwiesen bekommen hat, dass essentiell für die Definierung der Basisklasse in der Header-Datei ist.

Es würde mir sehr viel nützen, wenn mir jemand die richtige Funktionsweise der Präprozessoren erklären würde. Ich hab auch schon gegoogelt, aber naja es war nur beschränkt hilfreich. :thinking:

2

21.07.2012, 19:00

Headerdateien werden nicht kompiliert. Sie werden durch den Präprozessor in eine Sourcedatei "kopiert", bevor diese dann kompiliert wird. In welcher Headerdatei was steht ist also egal, du könntest auch in jeder Sourcedatei die Klasse neu deklarieren.

Die Includeguards (#ifndef HEADERNAME) dienen lediglich dazu, dass Klassen nicht mehrfach deklariert werden, wenn die selbe Headerdatei (in der Regel indirekt über andere) mehrfach in eine Sourcedatei inkludiert wird.
Lieber dumm fragen, als dumm bleiben!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

22.07.2012, 16:51

Ich habe folgende Präprozessoren gesetzt: #ifndef TSINGLETON und #define TSINGLETON, am Ende noch #endif.
(...)
Es würde mir sehr viel nützen, wenn mir jemand die richtige Funktionsweise der Präprozessoren erklären würde.

Das sind keine Präprozessoren. Der Präprozessor ist das Teil, was vor dem Compiler über Deine Dateien läuft und gewisse Ausdrücke ersetzt. Der Preprocessor ist also ein Programm oder Teil des Compilers. Diese Teile da mit #, das sind lediglich Makros oder Präprocessor-Anweisungen oder -Ausdrücke. Es keine Präprozessoren!
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

22.07.2012, 17:17

Abgesehen davon, solltest du dir das Singleton Pattern vielleicht mal anschauen, aber nicht verwenden... ;)

Werbeanzeige