<?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 schlägt fehl]]></title><description><![CDATA[<p>Ich habe folgende Klasse (ist nur der relevante Ausschnitt) für komplexe Zahlen:</p>
<p>class CComplex<br />
{<br />
public:<br />
inline CComplex() { re=im=0.0; }<br />
inline CComplex operator*(CComplex c) { return CComplex(re*c.re-im*<a href="http://c.im" rel="nofollow">c.im</a>,re*c.im+im*<a href="http://c.re" rel="nofollow">c.re</a>);}<br />
inline CComplex operator*(double &amp;d) { return CComplex(re*d,im*d);}<br />
double re,im;<br />
};</p>
<p>Wenn ich jedoch komplexe Zahlen mit double Zahlen multipliziere, siehe Beispiel:</p>
<p>double m_Phase[8192][8192]; // Phase of Field<br />
double m_Amplitude[8192][8192]; // Amplitude of Field<br />
CComplex m_Field[8192][8192]; // Full electric Field</p>
<p>CComplex Expi(double wt) {return CComplex(cos(wt),sin(wt));}<br />
CComplex Expi(CComplex x) {return</p>
<p>m_Field[x][y]= (m_Amplitude[x][y]) * (Expi(m_Phase[x][y]));</p>
<p>dann bekomme ich den folgenden Fehler:</p>
<p>error C2677: Binärer Operator '*': Es konnte kein globaler Operator gefunden werden, der den Typ 'CComplex' akzeptiert (oder keine geeignete Konvertierung möglich)</p>
<p>Was mache ich falsch ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167091/überladen-von-operator-schlägt-fehl</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 17:14:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167091.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Dec 2006 13:23:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladen von Operator schlägt fehl on Wed, 06 Dec 2006 13:23:48 GMT]]></title><description><![CDATA[<p>Ich habe folgende Klasse (ist nur der relevante Ausschnitt) für komplexe Zahlen:</p>
<p>class CComplex<br />
{<br />
public:<br />
inline CComplex() { re=im=0.0; }<br />
inline CComplex operator*(CComplex c) { return CComplex(re*c.re-im*<a href="http://c.im" rel="nofollow">c.im</a>,re*c.im+im*<a href="http://c.re" rel="nofollow">c.re</a>);}<br />
inline CComplex operator*(double &amp;d) { return CComplex(re*d,im*d);}<br />
double re,im;<br />
};</p>
<p>Wenn ich jedoch komplexe Zahlen mit double Zahlen multipliziere, siehe Beispiel:</p>
<p>double m_Phase[8192][8192]; // Phase of Field<br />
double m_Amplitude[8192][8192]; // Amplitude of Field<br />
CComplex m_Field[8192][8192]; // Full electric Field</p>
<p>CComplex Expi(double wt) {return CComplex(cos(wt),sin(wt));}<br />
CComplex Expi(CComplex x) {return</p>
<p>m_Field[x][y]= (m_Amplitude[x][y]) * (Expi(m_Phase[x][y]));</p>
<p>dann bekomme ich den folgenden Fehler:</p>
<p>error C2677: Binärer Operator '*': Es konnte kein globaler Operator gefunden werden, der den Typ 'CComplex' akzeptiert (oder keine geeignete Konvertierung möglich)</p>
<p>Was mache ich falsch ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187916</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Wed, 06 Dec 2006 13:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von Operator schlägt fehl on Wed, 06 Dec 2006 13:30:31 GMT]]></title><description><![CDATA[<p>Wenn du den Operator als Member überlädst, greifen implizite Typumwandlungen nicht für den linken Operanden (das heißt, der kann nur für die Multiplikation CComplex*double verwendet werden). Als Lösung kannst du den Operator global überladen:</p>
<pre><code class="language-cpp">CComplex operator*(const CComplex&amp; l,const CComplex&amp; r)
{return CComplex(l.re*r.re-l.im*r.im,l.re*r.im+l.im*r.re);}
</code></pre>
<p>(außerdem benötigst du eventuell noch einen Ctor, der double nach CComplex konvertieren kann)</p>
<p>PS: In der Klassendefinition angelegte Member sind übrigens automatisch 'inline'</p>
<p>PPS: Ehe du dir die Arbeit unnötig schwer machst - es gibt auch eine Klasse std::complex&lt;&gt; in der Standard-Bibliothek.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187920</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 06 Dec 2006 13:30:31 GMT</pubDate></item></channel></rss>