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

Gruwe

Frischling

  • »Gruwe« ist der Autor dieses Themas

Beiträge: 6

Wohnort: Saarland

Beruf: Elektroingenieur

  • Private Nachricht senden

1

15.07.2014, 19:17

Tribase.h generell includen?

Hallo Leute,

ich versuche momentan ein erstes kleines Spiel zu programmieren. Ich mache das anhand der Vorgehensweise wie in Kapitel 7 des Buches, in dem Breaknoid entwickelt wird, wandle das ganze jedoch ein wenig ab. Programmiere also nicht 1:1 nach, sondern mach mir meine eigenen Gedanken und schau dann, wie es im Buch gemacht wird und vergleiche. Das läuft bisher auch ganz gut, jedoch bin ich da auf etwas gestoßen womit ich leider bisher noch nicht konfrontiert wurde.

Also:
Im Buch wird ja die Hauptklasse CBreakanoid in der dafür vorgesehenen Header-Datei definiert. In dieser Header-Datei wird auch die tribase.h inkludiert. Weiterhin werden hier die jeweiligen Header-Dateien der einzelnen Spielzustände inkludiert z.B. "mainMenu.h". So weit, so gut. Jetzt werden ja in der Klassen-Definition vom MainMenu ja auch Variablen, etc. verwendet, welche in der TriBase-Engine definiert sind. So wird z.B. in jeder Klasse eines Spielzustandes die Methode

C-/C++-Quelltext

1
tbResult Load()


definiert.

So, jetzt ist die Tribase.h ja nicht in der Header-Datei des Hauptmenus (also MainMenu.h) inkludiert, demzufolge auch nicht in der zugehörigen Quelldatei MainMenu.cpp. Wenn ich nun jedoch innerhalb dieser Klasse z.B. eine Methode deklariere, welche den Rückgabetyp tbResult besitzen sollte, kennt der Compiler diese ja nicht. Demzufolge erhalte ich die Fehlermeldung, dass der Rückgabetyp unbekannt ist und als Standard-Rückgabewert ein Integer angenommen wird. Das ist natürlich nicht Sinn das Sache!

Prinzipiell würde ich nach meinem Kenntnisstand denken, dass ich in quasi jede Header-Datei auch die Tribase.h inkludieren müsste, was ja weder besonders toll aussieht noch im mitgelieferten Quellcode so angewandt wird. Wie ist das Problem zu lösen? Gibt es eine Vorgehensweise, dass z.B. in diesem Fall die Tribase.h generell überall inkludiert wird? Oder wie löst man so etwas?

Bin durch Google-Recherche und Nachschlagen in meinem C++-Buch leider nicht auf des Rätsels Lösung gestoßen!

Danke! :)

2

16.07.2014, 03:29

MainMenu.cpp inkludiert Breakanoid.h, welche die Tribase.h inkludiert und anschließend die MainMenu.h

Der Ansatz ist aber nicht unbedingt sinnvoll, da bei der Änderung einer einzelnen Header, z.B. MainMenu.h alle sources neu kompiliert werden müssen. Alternativ dazu bieten sich dann forward-declarations an, das nutzen von pointern bzw. sogar polymophism.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.