<?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[abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>ich hab eine kurze Frage. Zuerst der Sourcecode</p>
<p>irgendetwas.h</p>
<pre><code class="language-cpp">class Irgendetwas {

public:

virtual void machmal() const = 0;
void test();

};
</code></pre>
<p>irgendetwas.cpp</p>
<pre><code class="language-cpp">#include &quot;irgendetwas.h&quot;

void Irgendetwas::test() {
  // Irgendeine implementierung
}
</code></pre>
<p>etwas.h</p>
<pre><code class="language-cpp">#include &quot;irgendetwas.h&quot;

class Etwas : protected Irgendetwas { // Warum führt protected zu einer
                                      // Fehlermeldung beim compilieren

public:

Etwas();
virtual ~Etwas();

void machmal() const;

};
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &quot;etwas.h&quot;

using namespace std;

int main(int argc, char *argv[])
{
  Etwas *e1 = new Etwas();

  e1-&gt;machmal();
  e1-&gt;test(); // error: 'void Etwas::test()' is inaccessible
  delete e1;

  return EXIT_SUCCESS;
}
</code></pre>
<p>Soweit ich weiß heißt protected, dass eine abgeleitete Klasse auf Methoden zugreifen kann. Warum läßst sich der Sourcecode nicht compilieren? Schreibe ich statt &quot;protected&quot; &quot;public&quot; geht es.</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278573/abstrakte-klasse-und-error-void-etwas-test-is-inaccessible</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 05:14:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278573.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Dec 2010 09:41:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 09:41:57 GMT]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>ich hab eine kurze Frage. Zuerst der Sourcecode</p>
<p>irgendetwas.h</p>
<pre><code class="language-cpp">class Irgendetwas {

public:

virtual void machmal() const = 0;
void test();

};
</code></pre>
<p>irgendetwas.cpp</p>
<pre><code class="language-cpp">#include &quot;irgendetwas.h&quot;

void Irgendetwas::test() {
  // Irgendeine implementierung
}
</code></pre>
<p>etwas.h</p>
<pre><code class="language-cpp">#include &quot;irgendetwas.h&quot;

class Etwas : protected Irgendetwas { // Warum führt protected zu einer
                                      // Fehlermeldung beim compilieren

public:

Etwas();
virtual ~Etwas();

void machmal() const;

};
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &quot;etwas.h&quot;

using namespace std;

int main(int argc, char *argv[])
{
  Etwas *e1 = new Etwas();

  e1-&gt;machmal();
  e1-&gt;test(); // error: 'void Etwas::test()' is inaccessible
  delete e1;

  return EXIT_SUCCESS;
}
</code></pre>
<p>Soweit ich weiß heißt protected, dass eine abgeleitete Klasse auf Methoden zugreifen kann. Warum läßst sich der Sourcecode nicht compilieren? Schreibe ich statt &quot;protected&quot; &quot;public&quot; geht es.</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991801</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 09 Dec 2010 09:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 09:47:17 GMT]]></title><description><![CDATA[<p>Bei einer protected-Vererbung rutschen die public-Member in den protected Bereich der abgeleiteten Klasse. main() hat mit der Ableitung nix am Hut, ergo kann er auf den protected-Bereich nicht zugreifen. Und Etwas::test() ist durch die protected-Vererbung nur noch protected.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991803</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Thu, 09 Dec 2010 09:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 09:57:37 GMT]]></title><description><![CDATA[<p>l'abra d'or schrieb:</p>
<blockquote>
<p>Bei einer protected-Vererbung rutschen die public-Member in den protected Bereich der abgeleiteten Klasse. main() hat mit der Ableitung nix am Hut, ergo kann er auf den protected-Bereich nicht zugreifen. Und Etwas::test() ist durch die protected-Vererbung nur noch protected.</p>
</blockquote>
<p>Irgendwie mußt Du mir das genauer erklären. Eine abgeleitete Klasse sollte doch auf &quot;protected Member&quot; zugreifen können, oder? Etwas hat &quot;protected&quot; geerbt, nicht main. Und Etwas greift auf test() zu, nicht main. Oder sehe ich da etwas falsch? Müßte es in Etwas eine funktion test() geben, die test() in &quot;Irgendetwas&quot; aufruft? Und wenn ja, warum? Warum kann ich nicht Etwas instanziieren und auf test() in Irgendetwas zugreifen?</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991808</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 09 Dec 2010 09:57:37 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:04:14 GMT]]></title><description><![CDATA[<p>BlackPepper schrieb:</p>
<blockquote>
<p>Und Etwas greift auf test() zu, nicht main. Oder sehe ich da etwas falsch?</p>
</blockquote>
<p>Genau das ist der Teil, den du falsch siehst. Natürlich greift main hier auf test zu. Der Aufruf von test steht in main.</p>
<p>Wie sonst würde es deiner Meinung nach aussehen, wenn main auf test zugreift?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991810</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:07:50 GMT]]></title><description><![CDATA[<p>BlackPepper schrieb:</p>
<blockquote>
<p>Und Etwas greift auf test() zu, nicht main. Oder sehe ich da etwas falsch?</p>
</blockquote>
<p>Jo</p>
<pre><code class="language-cpp">int main()
{
  // ..
  e1-&gt;test(); // error: 'void Etwas::test()' is inaccessible
  // ..
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1991813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991813</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:10:34 GMT]]></title><description><![CDATA[<p>Du kannst aber nur public Elementfunktionen von außen aufrufen! Eine protected Ableitung macht doch nur Sinn, wenn man die abgeleitete Klasse nur intern benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991814</guid><dc:creator><![CDATA[ScyllaIllciz]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:11:22 GMT]]></title><description><![CDATA[<p>Du darfst den Zugriff nicht aus Instanz-Sicht sehen. Die übliche Sicht von Methodenaufrufen als &quot;Nachricht senden&quot; hilft hier vllt. etwas. &quot;public&quot; heißt: jeder und alles darf mir Nachrichten senden. protected heißt &quot;nur Instanzen meiner Klasse und meine Kinder dürfen mir Nachrichten senden, oder meine <em>friend</em>s&quot;. Und &quot;main&quot; ist keines von dem.<br />
Du kannst aber so etwas &quot;erzwingen&quot;:<br />
<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="😉"
    /> main als friend von Etwas deklarieren<br />
<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="😉"
    /> im Public-Bereich von Etwas ein &quot;using Irgendetwas::test;&quot;<br />
<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="😉"
    /> public erben<br />
Aber erzwinge nie etwas, was sich mit besserem Design umgehen lässt. Soll heißen: erbe public - hier scheint mir das die gewollte Herangehensweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991816</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:11:33 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>BlackPepper schrieb:</p>
<blockquote>
<p>Und Etwas greift auf test() zu, nicht main. Oder sehe ich da etwas falsch?</p>
</blockquote>
<p>Genau das ist der Teil, den du falsch siehst. Natürlich greift main hier auf etwas zu.</p>
<p>Wie sonst würde es deiner Meinung nach aussehen, wenn main auf etwas zugreift?</p>
</blockquote>
<p>Nach mir instanziiert main Etwas und benutzt die Methoden in Etwas. Wenn Etwas von Irgendetwas geerbt hat, hat Etwas auch die &quot;protected&quot; Methoden von Irgendetwas geerbt und deshalb hätte ich erwartet daß folgender Code in main funktioniert.</p>
<pre><code class="language-cpp">Etwas *e1 = new Etwas();

e1-&gt;test();

delete e1;
</code></pre>
<p>Nach meinem Verständnis hätte man mit eine Klasse</p>
<pre><code class="language-cpp">class Speziell : public Etwas {
};
</code></pre>
<p>nicht mehr auf test(); zugreifen können. Also</p>
<pre><code class="language-cpp">Speziell *s1 = new Speziell();

s1-&gt;test(); // hätte nicht mehr funktioniert

delete s1;
</code></pre>
<p>geht nicht mehr.</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991817</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:15:37 GMT]]></title><description><![CDATA[<p>Ich denke, du solltest die Kapitel über Vererbung und Elementzugriff/Zugriffs-Spezifizierer nochmal lesen. Das sollte in deinem Buch (welches hast du) eigentlich ganz gut beschrieben sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991819</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:16:47 GMT]]></title><description><![CDATA[<p><code>protected</code> heisst doch simpel beschrieben, dass nur die Klasse selbst und abgeleitete auf den Member zugreifen können. <code>main</code> ist aber weder die Klasse selbst, noch davon abgeleitet. Ergo: Der Zugriff ist nicht erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991820</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:16:47 GMT</pubDate></item><item><title><![CDATA[Reply to abstrakte Klasse und  error: &#x27;void Etwas::test()&#x27; is inaccessible on Thu, 09 Dec 2010 10:20:02 GMT]]></title><description><![CDATA[<p>l'abra d'or schrieb:</p>
<blockquote>
<p>Ich denke, du solltest die Kapitel über Vererbung und Elementzugriff/Zugriffs-Spezifizierer nochmal lesen. Das sollte in deinem Buch (welches hast du) eigentlich ganz gut beschrieben sein.</p>
</blockquote>
<p>Das werd ich auf alle Fälle. Ich dieses <a href="http://www.buecher.de/shop/lehr-und-handbuecher/c/breymann-ulrich/products_products/detail/prod_id/22488637/" rel="nofollow">http://www.buecher.de/shop/lehr-und-handbuecher/c/breymann-ulrich/products_products/detail/prod_id/22488637/</a> Buch in einer älteren Ausgabe. Jedenfalls Danke soweit.</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991822</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 09 Dec 2010 10:20:02 GMT</pubDate></item></channel></rss>