Unknown type name
-
Hallo zusammen,
ich wende mich an euch, weil ich ein wenig auf dem Schlauch stehe mit folgendem Code:
#ifndef Galaxyt_Renderer_h #define Galaxyt_Renderer_h //Frameworks #include <SDL/SDL.h> #include <OpenGL/gl.h> #include <OpenGL/glu.h> //Classes #include "GameController.h" class Renderer { GameController *myGameController; SDL_Surface *gameWindow; public: Renderer(GameController *newGameController, int width, int height); //Setting up the SDL window with provided width and height ~Renderer(); void render(); }; #endifund zwar wirft mir der Compiler in Zeile 15 und 20 dieses raus: "Unknown type name 'GameController'
Meine Recherchen im Internet haben bisher ergeben, dass das was mit nicht korrekt include'ten Headern zu tun haben kann bzw. dass diese doppelt included sind, dies sollte aber doch durch das #ifndef... eigentlich nicht möglich sein.
In allen anderen Klassen funktioniert das Einwandfrei, hat jemand eine Idee?
Vielen Dank im Voraus!
Anbei nochmal die GameController.h:
#ifndef Galaxyt_GameController_h #define Galaxyt_GameController_h //Frameworks #include <SDL/SDL.h> //Classes #include "Renderer.h" #include "Galaxy.h" class GameController { Galaxy *currentLevel; Renderer *myRenderer; public: GameController(); ~GameController(); void mainMenu(); //Runs the main-menu void gameLoop(); //Runs the gameloop Galaxy *getCurrentLevel(); //Returns the current Level }; #endif
-
Verfolge doch mal deine Includes und gehe es im Kopf durch. Ich zeig es dir mal auf, dann wirst du sofort sehen, was für einen Unsinn du da produziert hast

Sagen wir mal, wir starten in
GameController.h. Wir sind der Pre-Processor, gehen somit die Datei von oben nach unten durch. Wir gelangen irgendwann einmal zur Zeile 9#include "Renderer.h". Wir fügen somit den Inhalt aus derRenderer.han dieser Stelle ein. Im eingefügten Bereich ausRenderer.hkommen wir zur Zeile#include "GameController.h". Wir inkludieren hier also den Inhalt ausGameController.h. Wenn wir diesen Inhalt nun anschauen, finden wir heraus, dassGalaxyt_Renderer_hbereits definiert ist. Wir überspringen den eingefügten Bereich. Und dann geht es ans Ende. Das Resultat sieht dann ca. so aus:// ... class Renderer { // ... }; // ... class GameController { // ... }; // ...Wie du siehst, wird hier der
GameControllererst nach der KlasseRendererdefiniert. Daher istGameControllerin der KlasseRendererunbekannt.Dein Problem ist somit die zyklische Inkludierung der Header. Sowas ist zwar erlaubt, erzeugt aber meistens ein ungewolltes Verhalten. Dem kann man allerdings Abhilfe leisten. In
GameControllerverwendest du nur einen Zeiger auf einenRenderer. Daher würde hier eine Vorwärtsdeklaration absolut ausreichen. Nimm also ausGameController.hdas#include "Renderer.h"raus und ersetze es mit der Vorwärtsdeklaration von der KlasseRenderer.Grüssli
-
Jetzt wo du es so sagst.....

Ja was soll ich da noch groß zu sagen, ist ganz logisch.

Vielen Dank jedenfalls!