<?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[Operator &amp;lt;&amp;lt;]]></title><description><![CDATA[<p>Was ist hier falsch das Programm stürtzt aber wenn ich den string v2 ausgeben will.</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

ostream&amp; operator &lt;&lt;(ostream &amp;os, string &amp;str )
{
        return os  &lt;&lt; str;
}

int main()
{
char *v = &quot;abc&quot;;
string v2 = &quot;def&quot;;  

cout&lt;&lt; v &lt;&lt;endl;  // funktioniert
cout&lt;&lt; v2 &lt;&lt;endl;  // crash 

system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/301727/operator-lt-lt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 22:44:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301727.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Apr 2012 13:07:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; on Mon, 02 Apr 2012 13:07:41 GMT]]></title><description><![CDATA[<p>Was ist hier falsch das Programm stürtzt aber wenn ich den string v2 ausgeben will.</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

ostream&amp; operator &lt;&lt;(ostream &amp;os, string &amp;str )
{
        return os  &lt;&lt; str;
}

int main()
{
char *v = &quot;abc&quot;;
string v2 = &quot;def&quot;;  

cout&lt;&lt; v &lt;&lt;endl;  // funktioniert
cout&lt;&lt; v2 &lt;&lt;endl;  // crash 

system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2197971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197971</guid><dc:creator><![CDATA[oph]]></dc:creator><pubDate>Mon, 02 Apr 2012 13:07:41 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; on Mon, 02 Apr 2012 13:12:35 GMT]]></title><description><![CDATA[<p>Welche Funktion wird denn wohl in Zeile 8 aufgerufen? Richtig, die aus Zeile 6. Den Rest kannst du dir hoffentlich denken.</p>
<p>Dir ist schon klar, dass du gerade die Standardbibliothek nachbaust, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197973</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 02 Apr 2012 13:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; on Mon, 02 Apr 2012 13:40:36 GMT]]></title><description><![CDATA[<p>Ah, jetzt sehe ich was da falsch läuft das endet iner Endlosschleife und schreibt meinen stream voll bis er überläuft und dann crasht es.</p>
<p>Kann es sein das die Operator überladung nur in Verbindung mit einer Klasse funktioniert?</p>
<p>So funktioniert es jetzt jedenfalls:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class my_class
{

public:
        string var;
};

        ostream&amp; operator &lt;&lt;(ostream &amp;os, my_class &amp;m )
        {
                return os &lt;&lt; m.var;
        }

int main()
{
my_class my;
my.var = &quot;ABC&quot;;

cout&lt;&lt;my.var;

system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2197981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197981</guid><dc:creator><![CDATA[oph]]></dc:creator><pubDate>Mon, 02 Apr 2012 13:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; on Mon, 02 Apr 2012 13:56:26 GMT]]></title><description><![CDATA[<p>oph schrieb:</p>
<blockquote>
<p>Ah, jetzt sehe ich was da falsch läuft das endet iner Endlosschleife und schreibt meinen stream voll bis er überläuft und dann crasht es.</p>
</blockquote>
<p>Nein, es gibt eine Endlosrekursion, weil der operator&lt;&lt;-Aufruf in der Funktion die Funktion selbst aufruft, und dann einen Stack Overflow.</p>
<blockquote>
<p>Kann es sein das die Operator überladung nur in Verbindung mit einer Klasse funktioniert?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>So funktioniert es jetzt jedenfalls:</p>
</blockquote>
<p>Das hat damit aber nichts zu tun. string ist ja schon eine Klasse. Es funktioniert jetzt, weil du in deinem operator&lt;&lt; nicht mehr dieselbe Funktion, sondern die zu std::string gehörige aufrufst. [edit: Und weil du deine Funktion gar nicht aufrufst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Gut gesehen, SeppJ!]</p>
<p>Dass Operatorüberladung nur mit Klassen funktioniert äußert sich so, dass es ohne Beteiligung von Klassen Compilerfehler gibt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197982</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 02 Apr 2012 13:56:26 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; on Mon, 02 Apr 2012 13:51:12 GMT]]></title><description><![CDATA[<p>oph schrieb:</p>
<blockquote>
<p>Kann es sein das die Operator überladung nur in Verbindung mit einer Klasse funktioniert?</p>
</blockquote>
<p>Ja. Es macht auch herzlich wenig Sinn, wenn nicht wenigstens einer der beteiligten Typen ein benutzerdefinierter Datentyp ist.</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class my_class
{

public:
        string var;
};

        ostream&amp; operator &lt;&lt;(ostream &amp;os, my_class &amp;m )
        {
                return os &lt;&lt; m.var;
        }

int main()
{
my_class my;
my.var = &quot;ABC&quot;;

cout&lt;&lt;my.var;

system(&quot;PAUSE&quot;);
}
</code></pre>
</blockquote>
<p>Das macht ganz was anderes als du denkst. Ersetz mal Zeile 13 durch <code>return os &lt;&lt; &quot;Huhu&quot; &lt;&lt; m.var;</code> und dann wundere dich.</p>
<p>Wenn du mit Operatorüberladung experimentieren möchtest, dann versuch es doch mal mit etwas, das es noch nicht in der Standardbibliothek gibt. Zum Beispiel eine Klasse für Bruchzahlen oder einfache 2D-Vektoren. Da gibt es viele Operatoren mit sinnvollen Überladungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197984</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 02 Apr 2012 13:51:12 GMT</pubDate></item></channel></rss>