<?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[Fehlender Typbezeichner]]></title><description><![CDATA[<p>Hallo Leute !</p>
<p>Ich habe folgendes Problem:</p>
<p>Ich habe 2 Klassen:<br />
-ZustandsManager<br />
-Intro</p>
<p>Die <strong>ZustandsManager</strong> Klasse wird in der main.cpp inkludiert.<br />
Die <strong>Intro</strong> Klasse wird in der ZustandsManager Klasse inkludiert</p>
<p>Die Klasse <strong>ZustandsManager</strong> erzeugt eine neue <strong>Intro</strong> Klasse und soll ihr einen Pointer auf sich selber übergeben:</p>
<pre><code>Zustaende.push_back(new Intro(&quot;Intro&quot;,this));
</code></pre>
<p>Nun das Problem:<br />
Ich möchte in der <strong>Intro</strong> Klasse den Pointer zu der <strong>ZustandsManager</strong> Klasse als Member speichern.</p>
<p>Normal würde das ja so aussehen:</p>
<pre><code>ZustandsManager * pointer;
</code></pre>
<p>Doch komischerweiße meckert mein Compiler nun rum und meint er kennt <strong>ZustandsManager</strong> in der Klasse <strong>Intro</strong> nicht, dabei wird <strong>Intro</strong> ja erst nach <strong>ZustandsManager</strong> inkludiert.</p>
<p>Wie kann ich dieses Problem beheben?</p>
<p>Code:</p>
<p>main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;SFML/System.hpp&gt;
#include &lt;SFML/Audio.hpp&gt;
#include &lt;SFML/Window.hpp&gt;
#include &lt;SFML/Graphics.hpp&gt;
#include &lt;Blackanges/Input.h&gt;
#include &lt;time.h&gt;

#include &quot;ZustandsManager.h&quot;

int main()
{
    sf::VideoMode VMode(sf::VideoMode::getDesktopMode());
    sf::RenderWindow window(VMode, &quot;4 Gewinnt&quot;,sf::Style::Fullscreen);

	window.setVerticalSyncEnabled(true);

	//sf::Font font;
	//font.loadFromFile(&quot;arial.ttf&quot;);

	ZustandsManager derZustandsManager;

	srand (time(NULL));

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::KeyPressed &amp;&amp; event.key.code == sf::Keyboard::Escape)

                window.close();
        }

		window.clear();

		derZustandsManager.bearbeite();
		derZustandsManager.zeichne(window);

        window.display();
    }

    return 0;
}
</code></pre>
<p>Zustandsmanager.h</p>
<pre><code>#pragma once

#include &quot;Zustand.h&quot;
#include &quot;Intro.h&quot;
#include &quot;Menue.h&quot;
#include &quot;Optionen.h&quot;
#include &quot;Spiel.h&quot;
#include &quot;Pause.h&quot;
#include &quot;Ende.h&quot;

class ZustandsManager{

private:
	//Container beinhalted die Zustände
	std::vector &lt;Zustand*&gt; Zustaende;

public:

	enum ZustaendeNamen{
		Zustand_Intro,
		Zustand_Menue,
		Zustand_Optionen,
		Zustand_Spiel,
		Zustand_Pause,
		Zustand_Ende
	};

	//Konstruktor
	ZustandsManager(){

		Zustaende.push_back(new Intro(&quot;Intro&quot;,this));

	}

	//Destruktor leert den Zustands-Container -&gt; kein Speicherleck
	~ZustandsManager(){
		Zustaende.clear();
	}

	//Bearbeitet alle Zustände
	void bearbeite(){
		for(int i=0;Zustaende.begin()+i&lt;Zustaende.end();i++){
			Zustaende[i]-&gt;bearbeite();
		}
	}

	//Zeichnet alle Zustände
	 void zeichne(sf::RenderTarget&amp; target) const{
		for(int i=0;Zustaende.begin()+i&lt;Zustaende.end();i++){
			Zustaende[i]-&gt;zeichne(target);
		}
	}

	void neuerZustand(ZustaendeNamen id){
		switch(id){

//		case 0:{Zustaende.push_back(new Menue(&quot;Menue&quot;);break;}
		case 1:{break;}
		}

	}

};
</code></pre>
<p>Intro.h</p>
<pre><code>#pragma once

class Intro : public Zustand{

private:

	sf::String  s_Name;
	bool fertig;
	bool geladen;

	sf::Sprite Logo;
	sf::Texture t_Logo;

	ZustandsManager * zm_pointer;

	void eingabe(){

		if(Keyboard.pressed(sf::Keyboard::B))fertig=true;

	}

public:

	//Konstruktor
	Intro(const sf::String name,ZustandsManager * pointer) : s_Name  (name), fertig (false) 
	{
		t_Logo.loadFromFile(&quot;Bilder/Logo.png&quot;);
		Logo.setTexture(t_Logo);
	//	zm_pointer=pointer;

	}

	//Zeichnet die Klasse
	void zeichne(sf::RenderTarget&amp; target) const{	

		target.draw(Logo);

	}

	//Bearbeitet die Klasse
	void bearbeite(){

		eingabe();

		if(fertig){
		//	zm_pointer-&gt;neuerZustand(zm_pointer-&gt;Zustand_Menue);			
		}
		fertig=false;

	}

	//Gibt den Namen des Zustandes aus
	sf::String gebeName() {
		return  s_Name;
	}

};
</code></pre>
<p>MfG<br />
Er4zoX</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325865/fehlender-typbezeichner</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 16:18:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325865.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 May 2014 21:06:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehlender Typbezeichner on Wed, 21 May 2014 21:07:02 GMT]]></title><description><![CDATA[<p>Hallo Leute !</p>
<p>Ich habe folgendes Problem:</p>
<p>Ich habe 2 Klassen:<br />
-ZustandsManager<br />
-Intro</p>
<p>Die <strong>ZustandsManager</strong> Klasse wird in der main.cpp inkludiert.<br />
Die <strong>Intro</strong> Klasse wird in der ZustandsManager Klasse inkludiert</p>
<p>Die Klasse <strong>ZustandsManager</strong> erzeugt eine neue <strong>Intro</strong> Klasse und soll ihr einen Pointer auf sich selber übergeben:</p>
<pre><code>Zustaende.push_back(new Intro(&quot;Intro&quot;,this));
</code></pre>
<p>Nun das Problem:<br />
Ich möchte in der <strong>Intro</strong> Klasse den Pointer zu der <strong>ZustandsManager</strong> Klasse als Member speichern.</p>
<p>Normal würde das ja so aussehen:</p>
<pre><code>ZustandsManager * pointer;
</code></pre>
<p>Doch komischerweiße meckert mein Compiler nun rum und meint er kennt <strong>ZustandsManager</strong> in der Klasse <strong>Intro</strong> nicht, dabei wird <strong>Intro</strong> ja erst nach <strong>ZustandsManager</strong> inkludiert.</p>
<p>Wie kann ich dieses Problem beheben?</p>
<p>Code:</p>
<p>main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;SFML/System.hpp&gt;
#include &lt;SFML/Audio.hpp&gt;
#include &lt;SFML/Window.hpp&gt;
#include &lt;SFML/Graphics.hpp&gt;
#include &lt;Blackanges/Input.h&gt;
#include &lt;time.h&gt;

#include &quot;ZustandsManager.h&quot;

int main()
{
    sf::VideoMode VMode(sf::VideoMode::getDesktopMode());
    sf::RenderWindow window(VMode, &quot;4 Gewinnt&quot;,sf::Style::Fullscreen);

	window.setVerticalSyncEnabled(true);

	//sf::Font font;
	//font.loadFromFile(&quot;arial.ttf&quot;);

	ZustandsManager derZustandsManager;

	srand (time(NULL));

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::KeyPressed &amp;&amp; event.key.code == sf::Keyboard::Escape)

                window.close();
        }

		window.clear();

		derZustandsManager.bearbeite();
		derZustandsManager.zeichne(window);

        window.display();
    }

    return 0;
}
</code></pre>
<p>Zustandsmanager.h</p>
<pre><code>#pragma once

#include &quot;Zustand.h&quot;
#include &quot;Intro.h&quot;
#include &quot;Menue.h&quot;
#include &quot;Optionen.h&quot;
#include &quot;Spiel.h&quot;
#include &quot;Pause.h&quot;
#include &quot;Ende.h&quot;

class ZustandsManager{

private:
	//Container beinhalted die Zustände
	std::vector &lt;Zustand*&gt; Zustaende;

public:

	enum ZustaendeNamen{
		Zustand_Intro,
		Zustand_Menue,
		Zustand_Optionen,
		Zustand_Spiel,
		Zustand_Pause,
		Zustand_Ende
	};

	//Konstruktor
	ZustandsManager(){

		Zustaende.push_back(new Intro(&quot;Intro&quot;,this));

	}

	//Destruktor leert den Zustands-Container -&gt; kein Speicherleck
	~ZustandsManager(){
		Zustaende.clear();
	}

	//Bearbeitet alle Zustände
	void bearbeite(){
		for(int i=0;Zustaende.begin()+i&lt;Zustaende.end();i++){
			Zustaende[i]-&gt;bearbeite();
		}
	}

	//Zeichnet alle Zustände
	 void zeichne(sf::RenderTarget&amp; target) const{
		for(int i=0;Zustaende.begin()+i&lt;Zustaende.end();i++){
			Zustaende[i]-&gt;zeichne(target);
		}
	}

	void neuerZustand(ZustaendeNamen id){
		switch(id){

//		case 0:{Zustaende.push_back(new Menue(&quot;Menue&quot;);break;}
		case 1:{break;}
		}

	}

};
</code></pre>
<p>Intro.h</p>
<pre><code>#pragma once

class Intro : public Zustand{

private:

	sf::String  s_Name;
	bool fertig;
	bool geladen;

	sf::Sprite Logo;
	sf::Texture t_Logo;

	ZustandsManager * zm_pointer;

	void eingabe(){

		if(Keyboard.pressed(sf::Keyboard::B))fertig=true;

	}

public:

	//Konstruktor
	Intro(const sf::String name,ZustandsManager * pointer) : s_Name  (name), fertig (false) 
	{
		t_Logo.loadFromFile(&quot;Bilder/Logo.png&quot;);
		Logo.setTexture(t_Logo);
	//	zm_pointer=pointer;

	}

	//Zeichnet die Klasse
	void zeichne(sf::RenderTarget&amp; target) const{	

		target.draw(Logo);

	}

	//Bearbeitet die Klasse
	void bearbeite(){

		eingabe();

		if(fertig){
		//	zm_pointer-&gt;neuerZustand(zm_pointer-&gt;Zustand_Menue);			
		}
		fertig=false;

	}

	//Gibt den Namen des Zustandes aus
	sf::String gebeName() {
		return  s_Name;
	}

};
</code></pre>
<p>MfG<br />
Er4zoX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400227</guid><dc:creator><![CDATA[er4zox]]></dc:creator><pubDate>Wed, 21 May 2014 21:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlender Typbezeichner on Wed, 21 May 2014 21:18:32 GMT]]></title><description><![CDATA[<p>er4zox schrieb:</p>
<blockquote>
<p>Doch komischerweiße meckert mein Compiler nun rum und meint er kennt <strong>ZustandsManager</strong> in der Klasse <strong>Intro</strong> nicht, dabei wird <strong>Intro</strong> ja erst nach <strong>ZustandsManager</strong> inkludiert.</p>
</blockquote>
<p>Wieso komischerweise? Du hast ZustandsManager nicht inkludiert und deswegen kennt er ihn nicht. Ich würde das logisch statt komisch nennen.</p>
<p>Allgemein: Wenn sich 2 Klassen kennen müssen ist irgendwas im Design kaputt. Überdenke nochmal, ob das wirklich nötig ist.</p>
<p>Wenn du es für nötig erklärst sieh dir forward declarations an, also sowas wie <em>class ZustandsManager;</em>. Das reicht um einen Zeiger zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400228</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Wed, 21 May 2014 21:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlender Typbezeichner on Wed, 21 May 2014 21:23:42 GMT]]></title><description><![CDATA[<p>Hm ok danke schonmal, ich wollte halt dass die Intro Klasse dem ZustandsManager einen Befehl schickt, sobald das Intro fertig ist. Dazu müssen sich ja beide Klassen kennen.</p>
<p>Gibt es da eventuell einen anderen Lösungsansatz außer dass der ZustandsManager das Intro nach jedem durchgang abfragt ob es fertig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400229</guid><dc:creator><![CDATA[er4zox]]></dc:creator><pubDate>Wed, 21 May 2014 21:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlender Typbezeichner on Thu, 22 May 2014 07:35:23 GMT]]></title><description><![CDATA[<p>Jau, gibt´s. Nennt sich <a href="http://de.wikipedia.org/wiki/Beobachter_(Entwurfsmuster)" rel="nofollow">Observer Pattern</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400259</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 22 May 2014 07:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlender Typbezeichner on Thu, 22 May 2014 07:53:46 GMT]]></title><description><![CDATA[<p>Dein Destruktor <code>~ZustandsManager()</code> löscht nur Elemente im Vektor Zustaende. Er gibt _nicht_ den Speicher wieder frei, der mit den einzelnen Zeigern verknüpft ist. Du musst <code>delete</code> auf jedem Zeiger aufrufen.<br />
Evtl. kannst Du auch einen <code>unique_ptr</code> nehmen, oder sonstwie umdesignen, dass Du keinen D'tor brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400260</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 22 May 2014 07:53:46 GMT</pubDate></item></channel></rss>