<?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[Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde..]]></title><description><![CDATA[<p>Hi,</p>
<p>man verzeih mir den Titel aber mir ist nichts passenderes eingefallen.</p>
<p>Problematik:<br />
Ich habe ein Klassentemplate a la:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Generic
{
private:
   Scene* ptr_scene; //The scene this object resides in..
   foo()
   {
      ptr_scene-&gt;do_something();
   }
}
</code></pre>
<p>Und eine Klasse Scene (die eine Szene verwaltet, sprich jede Menge verschiedener Objekttypen...Generic ist nur ein Beispiel):</p>
<pre><code class="language-cpp">#include &quot;generic.h&quot;

class Scene
{
 private:
   Generic&lt;double&gt;* obj;
}
</code></pre>
<p>Und da komm ich in eine Bedrouille. Dadurch dass ich nicht &quot;scene.h&quot; in der generic.h einbeziehen kann, weil ja generic.h schon umgekehrt in scene.h einbezogen ist, erhalte ich jede Menge compiler fehler, verständlicherweise.</p>
<p>Bei einer normalen Klasse könnte ich scene.h in der Quelldatei einspeisen und es gäbe keine probleme. Wie mache ich das aber mit einem Klassentemplate? Vor allem weil ich so viele habe und nicht einfach in einer Datei layern kann.</p>
<p>Das Scene Objekt soll als &quot;Verwaltungseinheit&quot; gesehen werden, sprich es verwaltet (alloziiert etc.) und fungiert als Schnittstelle zwischen den Szeneobjekten.</p>
<p>Bin für Hilfe aber auch Ideen dankbar<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304203/pointer-auf-objekt-in-einem-klassentemplate-das-widerum-im-objekt-alloziert-wurde</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 21:02:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304203.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 May 2012 18:22:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 18:22:50 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>man verzeih mir den Titel aber mir ist nichts passenderes eingefallen.</p>
<p>Problematik:<br />
Ich habe ein Klassentemplate a la:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Generic
{
private:
   Scene* ptr_scene; //The scene this object resides in..
   foo()
   {
      ptr_scene-&gt;do_something();
   }
}
</code></pre>
<p>Und eine Klasse Scene (die eine Szene verwaltet, sprich jede Menge verschiedener Objekttypen...Generic ist nur ein Beispiel):</p>
<pre><code class="language-cpp">#include &quot;generic.h&quot;

class Scene
{
 private:
   Generic&lt;double&gt;* obj;
}
</code></pre>
<p>Und da komm ich in eine Bedrouille. Dadurch dass ich nicht &quot;scene.h&quot; in der generic.h einbeziehen kann, weil ja generic.h schon umgekehrt in scene.h einbezogen ist, erhalte ich jede Menge compiler fehler, verständlicherweise.</p>
<p>Bei einer normalen Klasse könnte ich scene.h in der Quelldatei einspeisen und es gäbe keine probleme. Wie mache ich das aber mit einem Klassentemplate? Vor allem weil ich so viele habe und nicht einfach in einer Datei layern kann.</p>
<p>Das Scene Objekt soll als &quot;Verwaltungseinheit&quot; gesehen werden, sprich es verwaltet (alloziiert etc.) und fungiert als Schnittstelle zwischen den Szeneobjekten.</p>
<p>Bin für Hilfe aber auch Ideen dankbar<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217900</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 31 May 2012 18:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 18:26:36 GMT]]></title><description><![CDATA[<p>Lösung: Mach eine Forward-Deklaration:</p>
<pre><code class="language-cpp">class Scene; // Jetzt weiss der Compiler, dass Scene eine Klasse ist.
             // Scene darf ab jetzt als Pointer und Referenz verwendet 
             // werden, jedoch nicht als normales Objekt, da die Grösse
             // noch unbekannt ist.

template&lt;typename T&gt;
class Generic
{
private:
   Scene* ptr_scene; //The scene this object resides in..
   foo()
   {
      ptr_scene-&gt;do_something();
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2217903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217903</guid><dc:creator><![CDATA[fwd]]></dc:creator><pubDate>Thu, 31 May 2012 18:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 18:47:28 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>vielen dank erstmal für die Antwort. Jedoch habe ich das schon gemacht! Dennoch schreit er. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
<p>Jedoch habe ich die Forward-Deklaration in der Basisklasse gemacht (sprich, Generic ist im tatsächlichen Projekt nochmal von iGeneric abgeleitet...ja das hätte ich ruhig mal erwähnen können..ändert die Problematik?).</p>
<p>Alle abgeleiteten Klassen greifen auf ptr_scene zu indem sie die Protected member funktion GetScene() aufrufen (ich könnte auch ptr_scene direkt als protected member &quot;sichtbar&quot; machen..). Sieht also eher so aus.</p>
<pre><code class="language-cpp">class Scene; 

class iGeneric
{
private:
   Scene* ptr_scene; //The scene this object resides in..
protected:
   Scene* GetScene() { return ptr_scene; }
}
</code></pre>
<pre><code class="language-cpp">#include &quot;iGeneric.h&quot;

template&lt;typename T&gt;
class Generic : public iGeneric
{
private:
   foo()
   {
      GetScene()-&gt;do_something();
   }
}
</code></pre>
<p>Fehler ist durchweg: Verwendung des undefinierten Typs &quot;Scene&quot;...<br />
hmm, oder sollte es mit der Forward-Deklaration dennoch gehen und ich habe folglich einen anderen Fehler irgendwo liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217918</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 31 May 2012 18:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 18:55:44 GMT]]></title><description><![CDATA[<p>Wenn du nur die Forward-Deklaration hast, darfst du auch keine Methoden aufrufen.</p>
<pre><code class="language-cpp">/***** Geht nicht ******/
// header:
struct C {
  foo() { GetScene()-&gt;do_something(); }
  // Woher sollte der Compiler die Funktion do_something kennen?
}

/***** So geht's ******/
// header-datei:
struct C {
  void foo(); // Funktionen nur deklarieren
}

// code-datei
#include &quot;Scene.h&quot;
void C::foo() { GetScene()-&gt;do_something(); } // Jetzt ist Scene ganz bekannt.
</code></pre>
<p>In deinem ersten Code-Beispiel sehe ich keinen Fehler, das müsste so kompillieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217924</guid><dc:creator><![CDATA[fwd]]></dc:creator><pubDate>Thu, 31 May 2012 18:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 19:05:11 GMT]]></title><description><![CDATA[<p>Aber dein letztes Beispiel bringt mich doch wieder zu dem eigentlich Problem (das scene.h include).</p>
<p>wo meinst du denn kann ich in meinem Beispiel die scene.h einspeisen? und ist es auch valide die Funktionsdefinition des Klassentemplates erst in einer späteren Quelldatei zu definieren? Das dürfte doch gar nicht gehen oder? Sonst bestünde das Problem nicht wenn ich ne Quelldatei hätte wo ich die Templatedefinition schreiben könnte (ohne diese halt wiederum in die tempalte-datei einzuspeisen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217927</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 31 May 2012 19:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 19:06:41 GMT]]></title><description><![CDATA[<p>fwd schrieb:</p>
<blockquote>
<p>In deinem ersten Code-Beispiel sehe ich keinen Fehler, das müsste so kompillieren.</p>
</blockquote>
<p>Aber da rufe ich ja auch ne funktion auf mit dem forward declared pointer von Scene?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217928</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 31 May 2012 19:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Thu, 31 May 2012 19:15:52 GMT]]></title><description><![CDATA[<p>Oder warte mal, deinem Beispiel folgend könnte ich die Definitionen ja auch unter die Scene klasse setzen oder? Das probier ich mal aus. Das wäre natürlich supppaaa.</p>
<p>Danke erstmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217930</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 31 May 2012 19:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Objekt in einem Klassentemplate das widerum im Objekt alloziert wurde.. on Sat, 02 Jun 2012 15:31:15 GMT]]></title><description><![CDATA[<p>Schau dir mal das <a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle" rel="nofollow">hier</a> an. Das hilft dir weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218524</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Sat, 02 Jun 2012 15:31:15 GMT</pubDate></item></channel></rss>