<?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[Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... )]]></title><description><![CDATA[<p>Hi! :p</p>
<pre><code class="language-cpp">struct B
{
};

struct A
{
	B operator+(A) {return B();}
};

std::ostream&amp; operator&lt;&lt;(ostream&amp; stream, B&amp; b) { stream &lt;&lt; &quot;B!!&quot; &lt;&lt; endl; return stream; }

int main()
{	
	//~ cout &lt;&lt; (A() + A()) &lt;&lt; endl; // Geht nicht
	B b = A() + A();
	cout &lt;&lt; b &lt;&lt; endl;
};
</code></pre>
<p>Was muss ich machen damit das nicht kommt:</p>
<p>g++ schrieb:</p>
<blockquote>
<p>Fehler: no match für »operator&lt;&lt;« in »std::cout &lt;&lt; A().A::operator+((A(), A()))«</p>
</blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
class A
{
	T i;

	friend ostream&amp; operator&lt;&lt; &lt;&gt;(ostream&amp;, A&lt;T&gt;&amp;);
};

template&lt;typename T&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; s, A&lt;T&gt;&amp; a)
{ 
	s &lt;&lt; a.i; 
	return s; 
}

int main()
{
    A&lt;int&gt; a;
    cout &lt;&lt; a &lt;&lt; endl;
}
</code></pre>
<p>bekomm ich auch nicht zum laufen ... <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="😕"
    /> <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/214402/probleme-mit-ostream-amp-operator-lt-lt-ostream-amp</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 15:40:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/214402.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 May 2008 17:07:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... ) on Wed, 28 May 2008 17:07:10 GMT]]></title><description><![CDATA[<p>Hi! :p</p>
<pre><code class="language-cpp">struct B
{
};

struct A
{
	B operator+(A) {return B();}
};

std::ostream&amp; operator&lt;&lt;(ostream&amp; stream, B&amp; b) { stream &lt;&lt; &quot;B!!&quot; &lt;&lt; endl; return stream; }

int main()
{	
	//~ cout &lt;&lt; (A() + A()) &lt;&lt; endl; // Geht nicht
	B b = A() + A();
	cout &lt;&lt; b &lt;&lt; endl;
};
</code></pre>
<p>Was muss ich machen damit das nicht kommt:</p>
<p>g++ schrieb:</p>
<blockquote>
<p>Fehler: no match für »operator&lt;&lt;« in »std::cout &lt;&lt; A().A::operator+((A(), A()))«</p>
</blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
class A
{
	T i;

	friend ostream&amp; operator&lt;&lt; &lt;&gt;(ostream&amp;, A&lt;T&gt;&amp;);
};

template&lt;typename T&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; s, A&lt;T&gt;&amp; a)
{ 
	s &lt;&lt; a.i; 
	return s; 
}

int main()
{
    A&lt;int&gt; a;
    cout &lt;&lt; a &lt;&lt; endl;
}
</code></pre>
<p>bekomm ich auch nicht zum laufen ... <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="😕"
    /> <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518621</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Wed, 28 May 2008 17:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... ) on Wed, 28 May 2008 19:39:51 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct B
{
};

struct A
{
	B operator+(A) {return B();}
};

std::ostream&amp; operator&lt;&lt;(ostream&amp; stream, B&amp; b) { stream &lt;&lt; &quot;B!!&quot; &lt;&lt; endl; return stream; }

int main()
{	
	//~ cout &lt;&lt; (A() + A()) &lt;&lt; endl; // Geht nicht
	B b = A() + A();
	cout &lt;&lt; b &lt;&lt; endl;
};
</code></pre>
<p>Was muss ich machen damit das nicht kommt:</p>
<p>g++ schrieb:</p>
<blockquote>
<p>Fehler: no match für »operator&lt;&lt;« in »std::cout &lt;&lt; A().A::operator+((A(), A()))«</p>
</blockquote>
</blockquote>
<p>nun zum einen fehlt das '#include &lt;iostream&gt;', dann einige vorangestellte std:: und const - folgendes compiliert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct B
{
};

struct A
{
    B operator+(A) const {return B();}
};

std::ostream&amp; operator&lt;&lt;( std::ostream&amp; stream, const B&amp; b)  // std:: vor ostream
{
    stream &lt;&lt; &quot;B!!&quot; &lt;&lt; std::endl;   // std:: vor endl
    return stream;
}

int main()
{  
    using namespace std; // ersetzt das std:: vor cout und endl weiter unten
    cout &lt;&lt; (A() + A()) &lt;&lt; endl; // Geht schon
    B b = A() + A();
    cout &lt;&lt; b &lt;&lt; endl;
}
</code></pre>
<p>Pigeon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
class A
{
	T i;

	friend ostream&amp; operator&lt;&lt; &lt;&gt;(ostream&amp;, A&lt;T&gt;&amp;);
};

template&lt;typename T&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; s, A&lt;T&gt;&amp; a)
{ 
	s &lt;&lt; a.i; 
	return s; 
}

int main()
{
    A&lt;int&gt; a;
    cout &lt;&lt; a &lt;&lt; endl;
}
</code></pre>
<p>bekomm ich auch nicht zum laufen ... <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="😕"
    /> <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>So funktioniert's:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
class A
{
    T i;

    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; s, A&amp; a )
    { 
        s &lt;&lt; a.i; 
        return s; 
    }
};

int main()
{
    using namespace std;
    A&lt;int&gt; a;
    cout &lt;&lt; a &lt;&lt; endl;
}
</code></pre>
<p>.. wobei ich nicht wirklich weiß, wie man den Body der Template-Ausgabe-Funktion nicht inline macht <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>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518710</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 28 May 2008 19:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... ) on Wed, 28 May 2008 20:52:39 GMT]]></title><description><![CDATA[<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Ja iostream und using namespace std hatte ich natürlich.</p>
<p>Warum muss denn ein const in den operator?? Und welche Auswirkung hat das auf die Referenz???? <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="😕"
    /> <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518753</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Wed, 28 May 2008 20:52:39 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... ) on Wed, 28 May 2008 21:45:52 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>.. wobei ich nicht wirklich weiß, wie man den Body der Template-Ausgabe-Funktion nicht inline macht <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>
</blockquote>
<p>Es handelt sich nicht um eine einzelne Funktion aber auch nicht um ein Funktionstemplate oder ein Member eines Templates - damit scheidet eine Templatedefinition <em>um diese Funktionen zu definieren</em> aus. Andererseits hängen diese natürlich irgendwie von den Templateparametern der Klasse ab - und so etwas kann nur durch Templatedefinitionen beschrieben werden. Schlussfolgerung: es ist nicht möglich, alle diese Funktionen außerhalb des Klassentemplates zu definieren.<br />
Möglich ist lediglich die Definition einzelner Funktionen jeweils für ein bestimmtes Templateargumenttupel - hier besteht dann keine Abhängigkeit von irgendwelchen Parametern mehr und eine ganz normale Funktionsdefinition erfüllt diesen Zweck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518770</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 May 2008 21:45:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... ) on Wed, 28 May 2008 21:46:36 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<p>Warum muss denn ein const in den operator?? Und welche Auswirkung hat das auf die Referenz???? <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="😕"
    /> <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Also es muss auf jeden Fall beim Streaming-operator ein const vor die Referenz, wenn Du den Ausdruck</p>
<pre><code class="language-cpp">cout &lt;&lt; (A() + A())
</code></pre>
<p>übersetzen willst.</p>
<p>Das Resultat von (A() + A()) ist ein temporäres Objekt vom Typ B und dieses darfst Du nicht an eine Funktion - in diesem Fall 'operator&lt;&lt;( std::ostream&amp;, B&amp; )' übergeben. Das geht nur per const referenz oder per Value.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518771</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 28 May 2008 21:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; ... ) on Wed, 28 May 2008 22:00:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a> Danke für die Antwort - hört sich ja etwas verwirrend an 'keine Funktion' aber auch 'kein Funktionstemplate' ..</p>
<p>Kann man die Konstruktion auch so aufbauen</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
class A
{
    T i;

    template&lt; typename U &gt;
    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; s, A&lt; U &gt;&amp; a );
};
template&lt; typename U &gt;
std::ostream&amp; operator&lt;&lt;( std::ostream&amp; s, A&lt; U &gt;&amp; a );
{
    s &lt;&lt; a.i;
    return s;
}
</code></pre>
<p>mir ist klar, dass das nicht dasselbe ist - mich würde nur mal interessieren wie das korrekt aussehen muss. Die Kombination friend plus template frisst kein Compiler. Der operator&lt;&lt; sollte doch jetzt nicht mehr von T abhängig sein, oder sehe ich das falsch?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518775</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 28 May 2008 22:00:20 GMT</pubDate></item></channel></rss>