<?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[Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Deklaration in einem Header</p>
<pre><code class="language-cpp">class Project {
    ...
    private:
        short unsigned int parameter;
    friend ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project&amp; proj);
    };
</code></pre>
<p>Und implementiert als</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project &amp;proj) {
    out &lt;&lt; proj.parameter &lt;&lt; endl;
}
</code></pre>
<p>Ich dachte mit friend kann man erreichen auf Private Variablen zuzugreifen? Doch leider beschwert sich gcc genau darüber:<br />
error: 'short unsigned int yamas::Project::parameter' is private<br />
(yamas ist mein namespace - aber das nur am Rande.)</p>
<p>Was mache ich falsch?</p>
<p>Danke,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261961/überladen-von-operator-lt-lt-wenn-eigener-namespace-gegeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 00:33:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261961.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Feb 2010 10:24:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:23:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Deklaration in einem Header</p>
<pre><code class="language-cpp">class Project {
    ...
    private:
        short unsigned int parameter;
    friend ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project&amp; proj);
    };
</code></pre>
<p>Und implementiert als</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project &amp;proj) {
    out &lt;&lt; proj.parameter &lt;&lt; endl;
}
</code></pre>
<p>Ich dachte mit friend kann man erreichen auf Private Variablen zuzugreifen? Doch leider beschwert sich gcc genau darüber:<br />
error: 'short unsigned int yamas::Project::parameter' is private<br />
(yamas ist mein namespace - aber das nur am Rande.)</p>
<p>Was mache ich falsch?</p>
<p>Danke,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861669</guid><dc:creator><![CDATA[MEE]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 10:53:53 GMT]]></title><description><![CDATA[<p>Im Header fehlt die Vollqualifizierung der STL Klassen, möglich, dass er dadurch die Funktionssignatur der Implementation nicht erkennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861685</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 26 Feb 2010 10:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:03:04 GMT]]></title><description><![CDATA[<p>Danke, das war wohl mißverständlich.</p>
<p>Im Header ist eingebunden:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;list&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;
</code></pre>
<p>Das habe ich weggelassen, um den Code kurz zu halten.</p>
<p>Aber gerade eben ist mir aufgefallen, das wenn ich den namespace auskommentiere und auch die entsprechende using-Deklaration im .cpp-File - dann funktioniert es.</p>
<p>Hm, also habe ich wohl den falschen Thread-Titel gewählt. Aber nochmal von vorne. Angenommen der Header sieht so aus (mit den oben gezeigten includes):</p>
<pre><code class="language-cpp">namespace yamas {
    class Project {
         // und hier Konstruktor, Destruktor etc.
         friend ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project&amp; proj);
         private:
            short unsigned int parameter;
    };
}
</code></pre>
<p>Wie müßte denn dann die korrekte Implementierung lauten?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

#include &quot;../include/ya_project.h&quot;
using namespace yamas;

ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project &amp;proj) {
    out &lt;&lt; proj.parameter &lt;&lt; endl;
}
</code></pre>
<p>Dies jedenfalls ist zu kurz gegriffen. Aber warum?</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861693</guid><dc:creator><![CDATA[MEE]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:03:04 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:30:41 GMT]]></title><description><![CDATA[<p>Im Header ist eingebunden:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;list&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std; // Das gehört hier nicht hin! 

namespace yamas 
{
   class Project {
      // Vollqualifizierte Typennamen benutzen!
      friend std::ostream&amp; operator&lt;&lt; ( std::ostream&amp; out, const Project&amp; proj);
      private:
         // Sachen gibts... warum nicht unsigned short?
         short unsigned int parameter;
    };
}
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

#include &quot;../include/ya_project.h&quot;

// Implementation findet im namespace yamas statt
namespace yamas
{
   ostream&amp; operator&lt;&lt; (ostream&amp; out, const Project &amp;proj) 
   {
      out &lt;&lt; proj.parameter &lt;&lt; endl;
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1861696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861696</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:35:34 GMT]]></title><description><![CDATA[<p>Ah, vielen Dank! Wie dumm von mir.</p>
<p>Nur: Warum soll man in Headerfiles kein 'using' verwenden und stattdess vollqualifizierte Typennamen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861702</guid><dc:creator><![CDATA[MEE]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:35:34 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:48:22 GMT]]></title><description><![CDATA[<p>MEE schrieb:</p>
<blockquote>
<p>Nur: Warum soll man in Headerfiles kein 'using' verwenden und stattdess vollqualifizierte Typennamen?</p>
</blockquote>
<p>Weil überall da wo dein Header includiert wird, der Namensraum ebenso ausgeleert wird. Das macht den Namensraum nutzlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861705</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:55:35 GMT]]></title><description><![CDATA[<p>Danke.</p>
<p>M.a.W. zweimal ein ähnlicher Fehler ... Zeit für die Mittagspause.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861709</guid><dc:creator><![CDATA[MEE]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von operator&amp;lt;&amp;lt; - wenn eigener namespace gegeben on Fri, 26 Feb 2010 11:57:56 GMT]]></title><description><![CDATA[<p>MEE schrieb:</p>
<blockquote>
<p>Im Header ist eingebunden:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;list&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;
</code></pre>
</blockquote>
<p>Iihh! So ein &quot;using namespace std;&quot; hat dort (im Header) nichts zu suchen. Du solltest auch genug Erklärungen dazu im Netz finden können. Es schaded auch nicht, verstanden zu haben, was diese Direktive genau macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861711</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 26 Feb 2010 11:57:56 GMT</pubDate></item></channel></rss>