<?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[Überladener operator&amp;lt;&amp;lt; wird nicht aufgerufen]]></title><description><![CDATA[<p>Ich weiß nicht, ob ich einfach irgendwas übersehen habe, aber aus irgendeinem Grund findet der Compiler die Überladung des op&lt;&lt; nicht.<br />
Es geht dabei um folgende Codeabschnitte:</p>
<pre><code class="language-cpp">binarytree.h:

template&lt;class T&gt;
class Node
{
    public:
        [...]
        T data;
        [...]
        friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const Node&lt;U&gt;&amp;);
        [...]
};

template &lt;class U&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Node&lt;U&gt;&amp; r)
{
    os &lt;&lt; r.data;
    return os;
}

main.cpp:

int main()
{
    Node&lt;int&gt;* head = new Node&lt;int&gt;;
    head-&gt;setData(5);

    cout &lt;&lt; head; //ein vordefiniert op&lt;&lt; wird aufgerufen
                  //-&gt; gibt die Addresse von dem Objekt aus

    operator&lt;&lt;(cout, head); //erzeugt Compilerfehler, dass der Aufruf nicht eindeutig ist
                            //Kandidaten sind aber nur für Basistypen (int, char)

    cout &lt;&lt; head-&gt;data; //funktioniert

    delete head;
    return 0;
}
</code></pre>
<p>Kann mir da wer weiterhelfen?</p>
<p>Edit: Na toll, ich denke da ewig drüber nach und dann fällt mir die Anwort ein, wenn ich den Beitrag grad absende :o</p>
<p>Ich übergebe dem op&lt;&lt; einen Pointer und das kann natürlich nicht implizit in eine Referenz umgewandelt werden. *Kopf gegen Tischkante hau*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170374/überladener-operator-lt-lt-wird-nicht-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 01:01:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170374.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Jan 2007 08:38:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladener operator&amp;lt;&amp;lt; wird nicht aufgerufen on Mon, 15 Jan 2007 08:40:48 GMT]]></title><description><![CDATA[<p>Ich weiß nicht, ob ich einfach irgendwas übersehen habe, aber aus irgendeinem Grund findet der Compiler die Überladung des op&lt;&lt; nicht.<br />
Es geht dabei um folgende Codeabschnitte:</p>
<pre><code class="language-cpp">binarytree.h:

template&lt;class T&gt;
class Node
{
    public:
        [...]
        T data;
        [...]
        friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const Node&lt;U&gt;&amp;);
        [...]
};

template &lt;class U&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Node&lt;U&gt;&amp; r)
{
    os &lt;&lt; r.data;
    return os;
}

main.cpp:

int main()
{
    Node&lt;int&gt;* head = new Node&lt;int&gt;;
    head-&gt;setData(5);

    cout &lt;&lt; head; //ein vordefiniert op&lt;&lt; wird aufgerufen
                  //-&gt; gibt die Addresse von dem Objekt aus

    operator&lt;&lt;(cout, head); //erzeugt Compilerfehler, dass der Aufruf nicht eindeutig ist
                            //Kandidaten sind aber nur für Basistypen (int, char)

    cout &lt;&lt; head-&gt;data; //funktioniert

    delete head;
    return 0;
}
</code></pre>
<p>Kann mir da wer weiterhelfen?</p>
<p>Edit: Na toll, ich denke da ewig drüber nach und dann fällt mir die Anwort ein, wenn ich den Beitrag grad absende :o</p>
<p>Ich übergebe dem op&lt;&lt; einen Pointer und das kann natürlich nicht implizit in eine Referenz umgewandelt werden. *Kopf gegen Tischkante hau*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210052</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Mon, 15 Jan 2007 08:40:48 GMT</pubDate></item><item><title><![CDATA[Reply to Überladener operator&amp;lt;&amp;lt; wird nicht aufgerufen on Mon, 15 Jan 2007 08:40:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">cout &lt;&lt; *head;
</code></pre>
<p>&quot;head&quot; ist keine Node, sondern nur ein Zeiger auf eine Node.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210055</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 15 Jan 2007 08:40:51 GMT</pubDate></item><item><title><![CDATA[Reply to Überladener operator&amp;lt;&amp;lt; wird nicht aufgerufen on Mon, 15 Jan 2007 08:42:00 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort, da war ich sogar mit meinem Edit langsamer :&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210056</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Mon, 15 Jan 2007 08:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to Überladener operator&amp;lt;&amp;lt; wird nicht aufgerufen on Mon, 15 Jan 2007 08:43:31 GMT]]></title><description><![CDATA[<p>Du hast einen op&lt;&lt; für Referenzen, aber nicht für Zeiger auf 'Node', also mußt du darüber auch Referenzen (bzw. Objekte) ausgeben:</p>
<pre><code class="language-cpp">Node&lt;int&gt;* head = new Node&lt;int&gt;;
head-&gt;setData(5);

cout &lt;&lt; *head;//Dereferenzieren -&gt; Zugriff auf das Objekt &quot;hinter&quot; deinem Zeiger
</code></pre>
<p>Edit: zu langsam <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="😕"
    /> was ist nur mit mir los?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210057</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 15 Jan 2007 08:43:31 GMT</pubDate></item></channel></rss>