<?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[Objekt in Methode zurückgeben]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte in einer Methode ein Objekt zurückgeben.</p>
<p>Meine Klasse ist in einer Header-Datei definiert, die Methode selber möchte ich aber in der *.cpp-Datei runterschreiben.</p>
<p><strong>Beispiel:</strong><br />
<em>header.h</em></p>
<pre><code class="language-cpp">class Klasse1
{
public:
  Klasse2 meineMethode();  
};
</code></pre>
<p><em>code.cpp</em></p>
<pre><code class="language-cpp">Klasse2 Klasse1::meineMethode()
{
//...........
    return eineInstanzVonKlasse2;
}
</code></pre>
<p>Soweit so gut, hier fehlt natürlich noch etwas. Ich vermute mal, dass es eher</p>
<pre><code class="language-cpp">Klasse2* meineMethode();
</code></pre>
<p>heißen sollte. Aber egal was ich mache, ich bekomme eine Fehlermeldung in Visual Studio (2010). Teilweise</p>
<pre><code>error C2143: Syntaxfehler: Es fehlt ';' vor '*'
</code></pre>
<p>Manchmal aber auch ein Fehler, dass die beiden Definitionen nicht übereinstimmen würden, obwohl diese absolut gleich sind.</p>
<p>Wenn ich nach dem Problem google bekomme ich allemöglichen Antworten (soetwas wie dort oben, etwas mit dem &amp;-operator,...). Daher meine Frage: Wie genau muss soetwas aussehen?</p>
<p>Vielen Dank im Voraus!</p>
<p>Gruß<br />
Bastian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276338/objekt-in-methode-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 10:18:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276338.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 Oct 2010 15:24:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:24:17 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte in einer Methode ein Objekt zurückgeben.</p>
<p>Meine Klasse ist in einer Header-Datei definiert, die Methode selber möchte ich aber in der *.cpp-Datei runterschreiben.</p>
<p><strong>Beispiel:</strong><br />
<em>header.h</em></p>
<pre><code class="language-cpp">class Klasse1
{
public:
  Klasse2 meineMethode();  
};
</code></pre>
<p><em>code.cpp</em></p>
<pre><code class="language-cpp">Klasse2 Klasse1::meineMethode()
{
//...........
    return eineInstanzVonKlasse2;
}
</code></pre>
<p>Soweit so gut, hier fehlt natürlich noch etwas. Ich vermute mal, dass es eher</p>
<pre><code class="language-cpp">Klasse2* meineMethode();
</code></pre>
<p>heißen sollte. Aber egal was ich mache, ich bekomme eine Fehlermeldung in Visual Studio (2010). Teilweise</p>
<pre><code>error C2143: Syntaxfehler: Es fehlt ';' vor '*'
</code></pre>
<p>Manchmal aber auch ein Fehler, dass die beiden Definitionen nicht übereinstimmen würden, obwohl diese absolut gleich sind.</p>
<p>Wenn ich nach dem Problem google bekomme ich allemöglichen Antworten (soetwas wie dort oben, etwas mit dem &amp;-operator,...). Daher meine Frage: Wie genau muss soetwas aussehen?</p>
<p>Vielen Dank im Voraus!</p>
<p>Gruß<br />
Bastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973160</guid><dc:creator><![CDATA[barratator]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:27:43 GMT]]></title><description><![CDATA[<p>Inkludierst du im Header von Klasse1 den Header von Klasse2?</p>
<p>Ob du ein Objekt, einen Zeiger oder eine Referenz zurückgibst, bleibt dir überlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973162</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:27:43 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:32:01 GMT]]></title><description><![CDATA[<p>Ist der Typ Klasse2 im Header bekannt? Mach ne Vorwärtsdeklaration.</p>
<p>Zu deiner Methode: Wenn du das Klasse2-Objekt normal in der Methode erstellst, musst du per value zurückgeben und nicht per Zeiger oder Referenz!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973164</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:31:25 GMT]]></title><description><![CDATA[<p>Das ist schon richtig, wenn man alles was in deinem Code fehlt richtig ergänzt. Daher ist anzunehmen, dass eben dieser Teil bei dir nicht richtig ist. Wahrscheinliche Fehlerquelle sind fehlende Includes/Deklarationen, eventuell auch ein fehlendes Semikolon nach einer Klassendefinition.</p>
<p>Versuche mal ein minimales aber vollständiges Beispiel zu erstellen, welches nicht mehr funktioniert. Und dann findest du dabei entweder deinen Fehler schon selber oder du kannst dieses vollständige Beispiel nochmal hier posten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973165</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:31:59 GMT]]></title><description><![CDATA[<p>In jeder *.cpp-Datei inkludiere ich eine Geader-Datei (nennen wir sie einfach mal <em>main.h</em>), welche alle anderen Header-Dateien im Projekt inkludiert...</p>
<p>Oder muss ich die dort nochmal einzeln inkludieren?</p>
<p>Gruß<br />
Bastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973166</guid><dc:creator><![CDATA[barratator]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:31:59 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:35:01 GMT]]></title><description><![CDATA[<p>barratator schrieb:</p>
<blockquote>
<p>In jeder *.cpp-Datei inkludiere ich eine Geader-Datei (nennen wir sie einfach mal <em>main.h</em>), welche alle anderen Header-Dateien im Projekt inkludiert...</p>
<p>Oder muss ich die dort nochmal einzeln inkludieren?</p>
</blockquote>
<p>Jo, musst du einzeln machen. So ein Include ist nichts anderes als ne Textersetzung, d. h. er kopiert den Inhalt der inkludierten Datei an die Stelle, wo das include steht. Dann ist klar, dass Klasse2 entweder vor oder hinter Klasse1 stehen muss und somit einer den anderen nicht kennt.</p>
<p>[Edit] Außerdem sind die Typen in den jeweils anderen Headern immer noch nicht bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973167</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 15:35:25 GMT]]></title><description><![CDATA[<p>barratator schrieb:</p>
<blockquote>
<p>In jeder *.cpp-Datei inkludiere ich eine Geader-Datei (nennen wir sie einfach mal <em>main.h</em>), welche alle anderen Header-Dateien im Projekt inkludiert...</p>
</blockquote>
<p>Das ist schlecht. Halte die Abhängigkeit so niedrig wie möglich. Wenn du in A.h nur einen Typ B brauchst, dann inkludiere in A.h auch nur B.h (und wenn du sogar nur B* oder B&amp; brauchst, mach am besten nur eine Vorwärtsdeklaration).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973171</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 31 Oct 2010 15:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 16:32:16 GMT]]></title><description><![CDATA[<p>So, ich hab jetzt mal alles so umgebaut, dass immer nur das inkludiert wird, was wirklich gebraucht wird. Klappt bis auf den selben Fehler wie eben auch perfekt (scheint sogar performanter zu sein <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>Hier ist meine Klasse, wo die Methode deklariert wird:</p>
<pre><code class="language-cpp">#ifndef __C_ENGINE_H_INCLUDED__
#define __C_ENGINE_H_INCLUDED__

#include &quot;irrlicht/irrlicht.h&quot;
#include &quot;CBaseEntity.h&quot;   
#include &quot;CEntityCamera.h&quot;   //definiert die Klasse CEntityCamera

class engine
{
public:
	engine();
	void create(int width, int height, CString title);
	void release();
	void renderAll();
	bool run();

	CEntityCamera createCamera();

	irr::IrrlichtDevice *device;
	irr::video::IVideoDriver *driver;
	irr::scene::ISceneManager *smgr;

};
#endif
</code></pre>
<p>Jetzt bekomme ich folgende Fehler:</p>
<pre><code>error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'createCamera'	(engine.h, Zeile 18)

error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.ient\engine.h (engine.h, Zeile 18)

warning C4183: 'createCamera': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen (engine.h, Zeile 18)
</code></pre>
<p>Ich hab auch schon sämtliche andere Klassen und Dateien abgesucht, ob nicht irgendwo (am Ende einer Klasse?) ein ; fehlt...Aber ich finde einfach nichts.</p>
<p>Gruß<br />
Bastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973206</guid><dc:creator><![CDATA[barratator]]></dc:creator><pubDate>Sun, 31 Oct 2010 16:32:16 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 17:11:28 GMT]]></title><description><![CDATA[<p>Kannst du mal (den relevanten Teil von) CEntityCamera.h zeigen?</p>
<p>PS: Meinst du es ist ne gute Idee, dich bei deinem Kenntnisstand bereits mit 3D-Engines zu beschäftigen?;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973229</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 31 Oct 2010 17:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 17:23:02 GMT]]></title><description><![CDATA[<p><strong>CEntityCamera.h</strong></p>
<pre><code class="language-cpp">#ifndef __C_CENTITYCAMERA_H_INCLUDED__
#define __C_CENTITYCAMERA_H_INCLUDED__

#include &quot;engine.h&quot;

class CEntityCamera : CBaseEntity
{
public:
	CEntityCamera(engine *gameEngine);
private:
	irr::scene::ICameraSceneNode *camera;
};
#endif
</code></pre>
<p>Ja, ich halte es mehr oder weniger für sinnvoll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /><br />
Ich habe schon in einer anderen Sprache ziemlich viel mit Irrlicht gemacht (was sich sogar sehen lässt). Aber diese andere Sprache kann leider nicht sonderlich viel, weshalb es notwenig war auf C++ umzuschwenken :S</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973232</guid><dc:creator><![CDATA[barratator]]></dc:creator><pubDate>Sun, 31 Oct 2010 17:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 17:43:22 GMT]]></title><description><![CDATA[<p>Du hast eine zyklische Abhängigkeit (die Header inkludieren sich gegenseitig), das kann nicht gehen.<br />
Ersetze in CEntityCamera.h das &quot;#include &quot;engine.h&quot;&quot; durch &quot;class engine;&quot; und &quot;class ICameraSceneNode;&quot; und inkludiere den Header von CBaseEntity.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973244</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 31 Oct 2010 17:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 19:05:24 GMT]]></title><description><![CDATA[<p>Yeah^^ Es klappt! Vielen Dank! <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>Hat jemand ein etwas umfangreicheres Tutorial bzgl. includes?</p>
<p>In meinem Buch steht das nur ganz kurz angeschlagen...Sowas wie &quot;class xyz;&quot; gibt es garnicht :S</p>
<p>Gruß<br />
Bastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973295</guid><dc:creator><![CDATA[barratator]]></dc:creator><pubDate>Sun, 31 Oct 2010 19:05:24 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 19:10:39 GMT]]></title><description><![CDATA[<p>Einen kleinen <a href="http://www.drakon.ch/?id=&amp;offset=5&amp;mobile=0&amp;show_entry=77" rel="nofollow">Artikel</a> zu dem Thema kann ich liefern, dann solltest du die Problematik verstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973304</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 31 Oct 2010 19:10:39 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in Methode zurückgeben on Sun, 31 Oct 2010 20:38:14 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Einen kleinen <a href="http://www.drakon.ch/?id=&amp;offset=5&amp;mobile=0&amp;show_entry=77" rel="nofollow">Artikel</a> zu dem Thema kann ich liefern, dann solltest du die Problematik verstehen.</p>
</blockquote>
<p>Ich hab deinen Text nur überflogen, aber du schreibst:</p>
<blockquote>
<p>Wird nämlich zuerst die human.h bearbeitet, sieht der Präprozessor das include &quot;car.h&quot; und holt den Inhalt rein, doch dort steht ja include &quot;human.h&quot;, was ja das eigentliche File ist. Ein Mensch kann sich hier kein vernünftiges Verhalten vorstellen und der Präprozessor auch nicht.</p>
</blockquote>
<p>Du solltest erwähnen, dass DAS eigentlich nicht das Problem ist, da man in der Regel include-guards (oder Compilerdirektive wie #pragma once) benutzt, die die Endlosrekursion verhindern.<br />
Das eigentliche Problem ist, dass bei zyklischen Headern zwangsläufig ein Typ nicht definiert ist (und zwar der, dessen Header in der UE zuerst inkludiert wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973349</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 31 Oct 2010 20:38:14 GMT</pubDate></item></channel></rss>