<?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[&#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27;]]></title><description><![CDATA[<p>Ich habe eine abstrake Basisklasse<br />
class node<br />
{...};<br />
und 3 Unterklassen<br />
class stadt_node {...}; etc</p>
<p>Dann wollt ich eine Funktion schreiben die mir ein Objekt von einem der 3en erstellt:</p>
<pre><code class="language-cpp">node* make_node(int type, int name)
{
    if(type == 1)
        return new stadt_node(name);
    else if(type == 2)
        return new dorf_node(name);
    else if(type == 3)
        return new raststaette_node(name);
    else
        return NULL;               
}
</code></pre>
<p>Warum geht das nicht? Fehlermeldung siehe Titel.</p>
<p>Ich hatte auch probiert dies als statische Methode in die Oberklasse node zu packen. Aber da sind die Unterklassen ja noch nicht deklariert, wie mach ich das nochmal?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171793/node-is-an-inaccessible-base-of-stadt_node</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 12:43:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171793.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jan 2007 13:28:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 13:28:40 GMT]]></title><description><![CDATA[<p>Ich habe eine abstrake Basisklasse<br />
class node<br />
{...};<br />
und 3 Unterklassen<br />
class stadt_node {...}; etc</p>
<p>Dann wollt ich eine Funktion schreiben die mir ein Objekt von einem der 3en erstellt:</p>
<pre><code class="language-cpp">node* make_node(int type, int name)
{
    if(type == 1)
        return new stadt_node(name);
    else if(type == 2)
        return new dorf_node(name);
    else if(type == 3)
        return new raststaette_node(name);
    else
        return NULL;               
}
</code></pre>
<p>Warum geht das nicht? Fehlermeldung siehe Titel.</p>
<p>Ich hatte auch probiert dies als statische Methode in die Oberklasse node zu packen. Aber da sind die Unterklassen ja noch nicht deklariert, wie mach ich das nochmal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219177</guid><dc:creator><![CDATA[lars0]]></dc:creator><pubDate>Mon, 29 Jan 2007 13:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 13:32:46 GMT]]></title><description><![CDATA[<p>Offensichtlich erbt einer der special_nodes private von der Basisklasse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219182</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 29 Jan 2007 13:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 13:33:19 GMT]]></title><description><![CDATA[<p>Hast du stadt_node überhaupt public von node abgeleitet? Wenn du nur <code>class statt_node : node {...}</code> schreibst, hast du eine private Ableitung - und die ist 'inaccessible'.</p>
<p>PS: Übrigens kannst du eine Mthode auch erst nach der Klassendefinition anlegen:</p>
<pre><code class="language-cpp">class node
{
publi:
  static node* make_node(int type, int name);
};

class stadt_node : public node
{
};
...

node* node::make_node(int type,int name)
{
...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1219183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219183</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Jan 2007 13:33:19 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 13:45:14 GMT]]></title><description><![CDATA[<p>Ja thx das wars, natürlich ist die Funktion danach deklariert.<br />
Wie &quot;deklariere&quot; ich denn die 3 Unterklassen vor der Oberklasse das ich meine make_node Funktion als static Methode in die Oberklasse packen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219195</guid><dc:creator><![CDATA[lars0]]></dc:creator><pubDate>Mon, 29 Jan 2007 13:45:14 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 13:48:37 GMT]]></title><description><![CDATA[<p>lars0 schrieb:</p>
<blockquote>
<p>Ja thx das wars, natürlich ist die Funktion danach deklariert.<br />
Wie &quot;deklariere&quot; ich denn die 3 Unterklassen vor der Oberklasse das ich meine make_node Funktion als static Methode in die Oberklasse packen kann?</p>
</blockquote>
<p>Gar nicht, wozu auch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219201</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Mon, 29 Jan 2007 13:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 13:52:51 GMT]]></title><description><![CDATA[<p>Ich würd die make_node Methode ja nicht in die node Klasse packen, sondern in eine extra Builder oder Factory Klasse. Google mal nach Factory Methode..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219205</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Mon, 29 Jan 2007 13:52:51 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 16:10:33 GMT]]></title><description><![CDATA[<p>Ja hab nach einer Programmierpause in der Uni mit C++ angefangen, das Wissen ist ein wenig eingerostet ^^</p>
<p>Danke nochmal für die Tipps eine Frage ist noch offen:</p>
<p>Nehmen wir mal an ich möchte die Funktion aber als static in die node Klasse packen also...:</p>
<p>class foo<br />
{<br />
static void bla() { .... new special_foo() }<br />
};</p>
<p>class special_foo : public foo<br />
{<br />
...<br />
};</p>
<p>Dafür gabs doch wenn ich mich recht entsinne eine Art &quot;Namedeklaration&quot; damit das geht oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219281</guid><dc:creator><![CDATA[Lars]]></dc:creator><pubDate>Mon, 29 Jan 2007 16:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 17:05:22 GMT]]></title><description><![CDATA[<p>Wie CStoll schon sagte, du kannst die Funktion darunter definieren, oder am besten in eine eigene foo.cpp Datei und die Klassenschnittstellen in eine foo.h Datei</p>
<pre><code class="language-cpp">//foo.h
#ifndef _FOO_H_
#define _FOO_H_

class foo
{
   static foo* bla();
};

class special_foo : public foo
{
...
};

#endif

//foo.cpp
#include &quot;foo.h&quot;

foo* foo::bla() { .... new special_foo() }
</code></pre>
<p>Aber wie gesagt, ich würd das trennen. Mach ne weitere Klasse</p>
<pre><code class="language-cpp">//ungetestet und unvollständig!!

#include &lt;memory&gt;  //für auto_ptr

class FooFactory
{
public:
    std::auto_ptr&lt;Foo&gt; create_foo() { ...return std::auto_ptr&lt;Foo&gt;( new special_foo() ) }
//...
};
</code></pre>
<p>Und auto_ptr verringert hier die Gefahr ein Speicherleck durch fehlendes delete beim Aufrufer zu erzeugen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219297</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Mon, 29 Jan 2007 17:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 17:45:53 GMT]]></title><description><![CDATA[<p>Ja ist mir schon klar das es so geht, nur weiß ich noch das es auch irgendwie per &quot;Namedeklaration&quot; der Klasse geht. Mich interessiert wie, Eleganz ist mir da egal <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219313</guid><dc:creator><![CDATA[Lars]]></dc:creator><pubDate>Mon, 29 Jan 2007 17:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 17:50:21 GMT]]></title><description><![CDATA[<p>Kann es sein, dass du mit &quot;namedeklaration&quot; die &quot;forwarddeclaration&quot; meinst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219315</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Mon, 29 Jan 2007 17:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 17:56:52 GMT]]></title><description><![CDATA[<p>kA wie es richtig heisst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219319</guid><dc:creator><![CDATA[Lars]]></dc:creator><pubDate>Mon, 29 Jan 2007 17:56:52 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 18:12:39 GMT]]></title><description><![CDATA[<p>Dann weiss ich auch nicht.</p>
<p>Es geht jedenfalls nicht, wenn du Kopf und Implementation nicht trennst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219327</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Mon, 29 Jan 2007 18:12:39 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 18:17:47 GMT]]></title><description><![CDATA[<p>Der Grund ist ganz einfach: Du kannst nichts erzeugen, was nicht definiert wurde. Eine Deklaration reicht nicht.</p>
<p>Die Lösung wurde ja bereits genannt: Erst die Oberklasse definieren, dann die Unterklassen, dann die Methode der Oberklasse, welche die Unterklassen erzeugen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219329</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 29 Jan 2007 18:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 18:45:36 GMT]]></title><description><![CDATA[<p>Doch ich bin mir sicher da gab es etwas wie<br />
class Abc;<br />
Ist die Frage wie das mit Unterklassen aussieht</p>
<p>Was ist denn wenn man die static Methode inline macht? Dann ist nichts mehr mit außerhalb definieren? Da muss es einfach eine Möglichkeit geben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219352</guid><dc:creator><![CDATA[Lars]]></dc:creator><pubDate>Mon, 29 Jan 2007 18:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to &#96;node&#x27; is an inaccessible base of &#96;stadt_node&#x27; on Mon, 29 Jan 2007 18:46:24 GMT]]></title><description><![CDATA[<p>Lars schrieb:</p>
<blockquote>
<p>class Abc;</p>
</blockquote>
<p>Richtig. Eine Forwarddeklaration. Wurde ja bereits genannt. Reicht nicht um ein Objekt zu erzeugen, dazu muss mindestens die Größe bekannt sein (von der Verfügkarbeit von Konstruktoren ganz zu schweigen).</p>
<blockquote>
<p>Was ist denn wenn man die static Methode inline macht? Dann ist nichts mehr mit außerhalb definieren.</p>
</blockquote>
<p>Doch, mit dem Schlüsselwort &quot;inline&quot; <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219353</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 29 Jan 2007 18:46:24 GMT</pubDate></item></channel></rss>