<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Unknown type name]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich wende mich an euch, weil ich ein wenig auf dem Schlauch stehe mit folgendem Code:</p>
<pre><code class="language-cpp">#ifndef Galaxyt_Renderer_h
#define Galaxyt_Renderer_h

//Frameworks
#include &lt;SDL/SDL.h&gt;
#include &lt;OpenGL/gl.h&gt;
#include &lt;OpenGL/glu.h&gt;

//Classes
#include &quot;GameController.h&quot;

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();
};

#endif
</code></pre>
<p>und zwar wirft mir der Compiler in Zeile 15 und 20 dieses raus: &quot;Unknown type name 'GameController'</p>
<p>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.</p>
<p>In allen anderen Klassen funktioniert das Einwandfrei, hat jemand eine Idee?</p>
<p>Vielen Dank im Voraus!</p>
<p>Anbei nochmal die GameController.h:</p>
<pre><code class="language-cpp">#ifndef Galaxyt_GameController_h
#define Galaxyt_GameController_h

//Frameworks
#include &lt;SDL/SDL.h&gt;

//Classes
#include &quot;Renderer.h&quot;

#include &quot;Galaxy.h&quot;

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
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/296273/unknown-type-name</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 01:03:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296273.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Dec 2011 10:22:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unknown type name on Thu, 01 Dec 2011 10:22:59 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich wende mich an euch, weil ich ein wenig auf dem Schlauch stehe mit folgendem Code:</p>
<pre><code class="language-cpp">#ifndef Galaxyt_Renderer_h
#define Galaxyt_Renderer_h

//Frameworks
#include &lt;SDL/SDL.h&gt;
#include &lt;OpenGL/gl.h&gt;
#include &lt;OpenGL/glu.h&gt;

//Classes
#include &quot;GameController.h&quot;

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();
};

#endif
</code></pre>
<p>und zwar wirft mir der Compiler in Zeile 15 und 20 dieses raus: &quot;Unknown type name 'GameController'</p>
<p>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.</p>
<p>In allen anderen Klassen funktioniert das Einwandfrei, hat jemand eine Idee?</p>
<p>Vielen Dank im Voraus!</p>
<p>Anbei nochmal die GameController.h:</p>
<pre><code class="language-cpp">#ifndef Galaxyt_GameController_h
#define Galaxyt_GameController_h

//Frameworks
#include &lt;SDL/SDL.h&gt;

//Classes
#include &quot;Renderer.h&quot;

#include &quot;Galaxy.h&quot;

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
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2151414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151414</guid><dc:creator><![CDATA[ScherzkeCks]]></dc:creator><pubDate>Thu, 01 Dec 2011 10:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Unknown type name on Thu, 01 Dec 2011 10:42:56 GMT]]></title><description><![CDATA[<p>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 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Sagen wir mal, wir starten in <code>GameController.h</code> . Wir sind der Pre-Processor, gehen somit die Datei von oben nach unten durch. Wir gelangen irgendwann einmal zur Zeile 9 <code>#include &quot;Renderer.h&quot;</code> . Wir fügen somit den Inhalt aus der <code>Renderer.h</code> an dieser Stelle ein. Im eingefügten Bereich aus <code>Renderer.h</code> kommen wir zur Zeile <code>#include &quot;GameController.h&quot;</code> . Wir inkludieren hier also den Inhalt aus <code>GameController.h</code> . Wenn wir diesen Inhalt nun anschauen, finden wir heraus, dass <code>Galaxyt_Renderer_h</code> bereits definiert ist. Wir überspringen den eingefügten Bereich. Und dann geht es ans Ende. Das Resultat sieht dann ca. so aus:</p>
<pre><code class="language-cpp">// ...

class Renderer
{
  // ...
};

// ...

class GameController
{
  // ...
};

// ...
</code></pre>
<p>Wie du siehst, wird hier der <code>GameController</code> erst nach der Klasse <code>Renderer</code> definiert. Daher ist <code>GameController</code> in der Klasse <code>Renderer</code> unbekannt.</p>
<p>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 <code>GameController</code> verwendest du nur einen Zeiger auf einen <code>Renderer</code> . Daher würde hier eine Vorwärtsdeklaration absolut ausreichen. Nimm also aus <code>GameController.h</code> das <code>#include &quot;Renderer.h&quot;</code> raus und ersetze es mit der Vorwärtsdeklaration von der Klasse <code>Renderer</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151423</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 01 Dec 2011 10:42:56 GMT</pubDate></item><item><title><![CDATA[Reply to Unknown type name on Thu, 01 Dec 2011 12:46:03 GMT]]></title><description><![CDATA[<p>Jetzt wo du es so sagst..... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ja was soll ich da noch groß zu sagen, ist ganz logisch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vielen Dank jedenfalls!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151462</guid><dc:creator><![CDATA[ScherzkeCks]]></dc:creator><pubDate>Thu, 01 Dec 2011 12:46:03 GMT</pubDate></item></channel></rss>