<?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[Scope-Operator]]></title><description><![CDATA[<p>hiho ihrs,</p>
<p>ich habe eine Verständnisfrage zum Scope-Operator.</p>
<p>Folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class A
{
    public:
        int i;
};

class B : public A{};

class C : public A{};

class D : public B, public C{};

int main()
{
    D d;

    cout &lt;&lt; d.B::A::i;
    cout &lt;&lt; d.B::i;

    system(&quot;pause&gt;nul&quot;);
    return 0;
}
</code></pre>
<p><strong>Compilerfehler:</strong> 'A' is an ambiguous base of 'D'.</p>
<p>- Wenn man ein Objekt einer Subklasse erzeugt, enthält dieses ja ein anonymes Objekt der Basisklasse.</p>
<p>- Demnach hat also ein B-Objekt und ein C-Objekt jeweils ein anonymes A-Objekt.</p>
<p><strong>Frage:</strong><br />
Wieso funktioniert &quot; d.B::A::i &quot; nicht, bzw. was sagt diese Anweisung genau aus ?</p>
<p>Ich dachte, dass man mit dieser Anweisung explizit das anonyme Objekt der Klasse B anspricht,<br />
demnach also <strong>B::A::i &lt;==&gt; B::i</strong> sein sollte.... dem scheint aber nicht so <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=":confused:"
      alt="😕"
    /></p>
<p>danke euch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266539/scope-operator</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 06:23:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266539.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 May 2010 17:36:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 17:39:47 GMT]]></title><description><![CDATA[<p>hiho ihrs,</p>
<p>ich habe eine Verständnisfrage zum Scope-Operator.</p>
<p>Folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class A
{
    public:
        int i;
};

class B : public A{};

class C : public A{};

class D : public B, public C{};

int main()
{
    D d;

    cout &lt;&lt; d.B::A::i;
    cout &lt;&lt; d.B::i;

    system(&quot;pause&gt;nul&quot;);
    return 0;
}
</code></pre>
<p><strong>Compilerfehler:</strong> 'A' is an ambiguous base of 'D'.</p>
<p>- Wenn man ein Objekt einer Subklasse erzeugt, enthält dieses ja ein anonymes Objekt der Basisklasse.</p>
<p>- Demnach hat also ein B-Objekt und ein C-Objekt jeweils ein anonymes A-Objekt.</p>
<p><strong>Frage:</strong><br />
Wieso funktioniert &quot; d.B::A::i &quot; nicht, bzw. was sagt diese Anweisung genau aus ?</p>
<p>Ich dachte, dass man mit dieser Anweisung explizit das anonyme Objekt der Klasse B anspricht,<br />
demnach also <strong>B::A::i &lt;==&gt; B::i</strong> sein sollte.... dem scheint aber nicht so <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=":confused:"
      alt="😕"
    /></p>
<p>danke euch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895275</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 17:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 17:56:36 GMT]]></title><description><![CDATA[<blockquote>
<p><strong>Compilerfehler:</strong> 'A' is an ambiguous base of 'D'.</p>
<p>- Wenn man ein Objekt einer Subklasse erzeugt, enthält dieses ja ein anonymes Objekt der Basisklasse.</p>
<p>- Demnach hat also ein B-Objekt und ein C-Objekt jeweils ein anonymes A-Objekt.</p>
</blockquote>
<p>Was verstehst du unter anonym? Jedes der beiden Basisklassenobjekte hat ein A-Basisklassenobjekt. Da ist aber nichts anonym dran, die sind öffentlich geerbt, also auch öffentlich zugreifbar.</p>
<p>Versuch dir möglichst keine unüblichen Bezeichnungen anzugewöhnen - es wird dich niemand verstehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895285</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 10 May 2010 17:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 17:59:12 GMT]]></title><description><![CDATA[<p>Hi Dweb,</p>
<p>keine Ahnung, warum der scope-Operator sich beschwert,<br />
jedoch geht es so ohne Probleme, falls du nur eine Lösung dafür suchst:</p>
<pre><code class="language-cpp">D d;
B&amp; b = d;
cout &lt;&lt; b.i;
</code></pre>
<p>oder alternativ:</p>
<pre><code class="language-cpp">cout &lt;&lt; static_cast&lt;B&amp;&gt;(d).i;
</code></pre>
<p>Gruß,<br />
CSpille</p>
<p>EDIT: Hoffentlich hat es keiner gemerkt ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895289</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 17:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 18:05:56 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Was verstehst du unter anonym?</p>
</blockquote>
<p>Das implizit erzeugte Objekt der Klasse A hat ja keinen Namen, darum nenne ich es anonym <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895290</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 18:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 18:08:41 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>keine Ahnung, warum der scope-Operator sich beschwert,<br />
jedoch geht es so ohne Probleme, falls du nur eine Lösung dafür suchst:</p>
</blockquote>
<p>hihi, eine Lösung habe ich schon <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="🙂"
    /><br />
Aber wenn du es so sagst... kommt bei dir mit meinem Beispiel kein Compilerfehler CSpille ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895294</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 18:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 18:21:45 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>CSpille schrieb:</p>
<blockquote>
<p>keine Ahnung, warum der scope-Operator sich beschwert,<br />
jedoch geht es so ohne Probleme, falls du nur eine Lösung dafür suchst:</p>
</blockquote>
<p>hihi, eine Lösung habe ich schon <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="🙂"
    /><br />
Aber wenn du es so sagst... kommt bei dir mit meinem Beispiel kein Compilerfehler CSpille ?</p>
</blockquote>
<p>Doch...<br />
Ich krieg den gleichen Compilerfehler</p>
<p>EDIT: i686-apple-darwin9-g++-4.0.1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895299</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 18:21:45 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Mon, 10 May 2010 18:38:37 GMT]]></title><description><![CDATA[<p>sou,<br />
habe gerade folgendes gefunden, ich zitiere:</p>
<blockquote>
<p>The compiler checks for ambiguities at compile time. Because ambiguity checking occurs before access control or type checking, ambiguities may result even if only one of several members with the same name is accessible from the derived class.</p>
</blockquote>
<p>Wenn ich das richtig verstehe, interessiert den Compiler zuerst einmal gar nicht ob da B::A::i oder C::A::i oder sonstwas mit A::i steht.</p>
<p>Das heißt, sobald der Compiler A::i erkennt platzt ihm der Kragen,<br />
egal in welcher Relation das A::i verwendet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895318</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 18:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Scope-Operator on Tue, 11 May 2010 06:40:13 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Was verstehst du unter anonym?</p>
</blockquote>
<p>Das implizit erzeugte Objekt der Klasse A hat ja keinen Namen, darum nenne ich es anonym <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
</blockquote>
<p>Das ist genauso implizit oder explizit erzeugt wie sämtliche Memberobjekte. Es als anonym zu bezeichnen, weil es keinen Namen hat, ist nicht üblich. Nenns einfach Basisklassenobjekt, ohne implizit und anonym, dann weiß jeder was gemeint ist <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/1895486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895486</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 May 2010 06:40:13 GMT</pubDate></item></channel></rss>