<?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; überladung klappt nicht]]></title><description><![CDATA[<p>Ich befasse mich gerade mit der Überladung von Operatoren und bei mir will das nicht so richtig klappen.<br />
Ich habe mir Quellcode aus dem Internet in eine cpp datei kopiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

// ... wird spaeter erklaert
#if defined (IMPLICIT_USING_STD)
using namespace std;
#endif

class Complex {

  // Diese Ausgabe Operatorfunktion muss auf die
  // privaten Member &quot;m_re&quot; und &quot;m_im&quot; zugreifen können!
  friend ostream &amp; operator&lt;&lt; (ostream&amp;, const Complex &amp;);

public:
  Complex () {};
  Complex (double re, double im) : m_re(re), m_im(im) {}

  Complex operator+ (const Complex &amp;);
  Complex operator- (const Complex &amp;);
private:
  double m_re;
  double m_im;
};

Complex
Complex::operator+ (const Complex &amp;c)
{
  Complex result;
  result.m_re = this -&gt; m_re + c.m_re;
  result.m_im = this -&gt; m_im + c.m_im;
  return result;
}

Complex
Complex::operator- (const Complex &amp;c)
{
  Complex result;
  result.m_re = this -&gt; m_re - c.m_re;
  result.m_im = this -&gt; m_im - c.m_im;
  return result;
}

// Ueberladen der Operatorfunktion &quot;operator&lt;&lt;&quot;
// fuer die Operanden &quot;ostream&quot; und &quot;Complex&quot;
// So koennen dann Complex Objekte wie ganz
// normale Variablen ausgegeben werden.
ostream &amp; operator&lt;&lt; (ostream &amp;o, const Complex &amp;c)
{
  o &lt;&lt; &quot;(&quot; &lt;&lt; c.m_re &lt;&lt; &quot;,&quot; &lt;&lt; c.m_im &lt;&lt; &quot;)&quot;;
  return o;
}

int
main ()
{
  Complex c1(1.0, 2.0);
  Complex c2(3.14, 2.718);
  Complex c3, c4;

  // Anwendung der Operatoren &quot;+&quot; und &quot;-&quot;
  c3 = c1 + c2;
  c4 = c1 - c2;

  // Anwendung des Standard Ausgabeoperators &quot;&lt;&lt;&quot;
  // auf den benutzerdefinierten Datentyp &quot;Complex&quot;.
  cout &lt;&lt; c1 &lt;&lt; &quot; + &quot; &lt;&lt; c2 &lt;&lt; &quot; = &quot; &lt;&lt; c3 &lt;&lt; endl;
  cout &lt;&lt; c1 &lt;&lt; &quot; - &quot; &lt;&lt; c2 &lt;&lt; &quot; = &quot; &lt;&lt; c4 &lt;&lt; endl;
}
</code></pre>
<p>Wenn ich das Kompilieren will, bekomme ich mehrere Fehlermeldungen.<br />
Liegt das jetzt an meinem Compiler? weil in einer Vorlesung wurde uns das genauso gezeigt.<br />
Fehlmeldungen:<br />
Complex.cpp:12: error: ISO C++ forbids declaration of 'ostream' with no type<br />
Complex.cpp:12: error: 'ostream' is neither function nor member function; cannot be declared friend<br />
Complex.cpp:12: error: expected ';' before '&amp;' token<br />
Complex.cpp:47: error: expected constructor, destructor, or type conversion before '&amp;' token</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257578/operator-lt-lt-überladung-klappt-nicht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 04:33:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257578.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Dec 2009 16:17:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; überladung klappt nicht on Wed, 30 Dec 2009 16:17:13 GMT]]></title><description><![CDATA[<p>Ich befasse mich gerade mit der Überladung von Operatoren und bei mir will das nicht so richtig klappen.<br />
Ich habe mir Quellcode aus dem Internet in eine cpp datei kopiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

// ... wird spaeter erklaert
#if defined (IMPLICIT_USING_STD)
using namespace std;
#endif

class Complex {

  // Diese Ausgabe Operatorfunktion muss auf die
  // privaten Member &quot;m_re&quot; und &quot;m_im&quot; zugreifen können!
  friend ostream &amp; operator&lt;&lt; (ostream&amp;, const Complex &amp;);

public:
  Complex () {};
  Complex (double re, double im) : m_re(re), m_im(im) {}

  Complex operator+ (const Complex &amp;);
  Complex operator- (const Complex &amp;);
private:
  double m_re;
  double m_im;
};

Complex
Complex::operator+ (const Complex &amp;c)
{
  Complex result;
  result.m_re = this -&gt; m_re + c.m_re;
  result.m_im = this -&gt; m_im + c.m_im;
  return result;
}

Complex
Complex::operator- (const Complex &amp;c)
{
  Complex result;
  result.m_re = this -&gt; m_re - c.m_re;
  result.m_im = this -&gt; m_im - c.m_im;
  return result;
}

// Ueberladen der Operatorfunktion &quot;operator&lt;&lt;&quot;
// fuer die Operanden &quot;ostream&quot; und &quot;Complex&quot;
// So koennen dann Complex Objekte wie ganz
// normale Variablen ausgegeben werden.
ostream &amp; operator&lt;&lt; (ostream &amp;o, const Complex &amp;c)
{
  o &lt;&lt; &quot;(&quot; &lt;&lt; c.m_re &lt;&lt; &quot;,&quot; &lt;&lt; c.m_im &lt;&lt; &quot;)&quot;;
  return o;
}

int
main ()
{
  Complex c1(1.0, 2.0);
  Complex c2(3.14, 2.718);
  Complex c3, c4;

  // Anwendung der Operatoren &quot;+&quot; und &quot;-&quot;
  c3 = c1 + c2;
  c4 = c1 - c2;

  // Anwendung des Standard Ausgabeoperators &quot;&lt;&lt;&quot;
  // auf den benutzerdefinierten Datentyp &quot;Complex&quot;.
  cout &lt;&lt; c1 &lt;&lt; &quot; + &quot; &lt;&lt; c2 &lt;&lt; &quot; = &quot; &lt;&lt; c3 &lt;&lt; endl;
  cout &lt;&lt; c1 &lt;&lt; &quot; - &quot; &lt;&lt; c2 &lt;&lt; &quot; = &quot; &lt;&lt; c4 &lt;&lt; endl;
}
</code></pre>
<p>Wenn ich das Kompilieren will, bekomme ich mehrere Fehlermeldungen.<br />
Liegt das jetzt an meinem Compiler? weil in einer Vorlesung wurde uns das genauso gezeigt.<br />
Fehlmeldungen:<br />
Complex.cpp:12: error: ISO C++ forbids declaration of 'ostream' with no type<br />
Complex.cpp:12: error: 'ostream' is neither function nor member function; cannot be declared friend<br />
Complex.cpp:12: error: expected ';' before '&amp;' token<br />
Complex.cpp:47: error: expected constructor, destructor, or type conversion before '&amp;' token</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829912</guid><dc:creator><![CDATA[Erebos1988]]></dc:creator><pubDate>Wed, 30 Dec 2009 16:17:13 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; überladung klappt nicht on Wed, 30 Dec 2009 16:44:28 GMT]]></title><description><![CDATA[<p>hab grad keinen compiler zur Hand,aber was mir komsch erscheint ist deine<br />
if defined....<br />
wenn ich einfach annehmen würde dass vom code her alles stimmt klappt es von der logik nicht du nimmst std nur wenn es automatisch vom compiler genommen wird, müsste es nicht eher genommen werden wenn der compiler es nicht automatisch nimmt? ausserdem sollte man sich nie drauf verlassen dass ein compiler nimmt und was nicht, immer selber einbinden was du brauchst!</p>
<p>Versuch mak ohne das #if bis #endif und nimm nur</p>
<pre><code class="language-cpp">using namespace std
</code></pre>
<p>bin mir nichtsicher aber koennte ein Grund sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829936</guid><dc:creator><![CDATA[uhsuhz ausgeloggt]]></dc:creator><pubDate>Wed, 30 Dec 2009 16:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;lt;&amp;lt; überladung klappt nicht on Wed, 30 Dec 2009 18:30:34 GMT]]></title><description><![CDATA[<p>Tatsache daran lag es, jetzt bekomme ich keine Fehlmeldungen mehr, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829997</guid><dc:creator><![CDATA[Erebos1988]]></dc:creator><pubDate>Wed, 30 Dec 2009 18:30:34 GMT</pubDate></item></channel></rss>