<?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[operatoren + * = ueberladen]]></title><description><![CDATA[<p>Hallo,<br />
ich wuerde gerne eine Art lineare-algebra vektor-klasse schreiben. Mit den instanzen dieser klasse sollte man rechnen koennen, ich wuerde also gerne diese myVector (nenne ich nun so, weil die klasse so heisst) addieren koennen, etc etc. Folgendes sollte also moegloch sein:</p>
<pre><code class="language-cpp">myVector x,y,z; 
//initialize vectors here... 
x = y+z;
</code></pre>
<p>Wenn ich also nichts falsch verstanden habe sollte dies moeglich sein indem ich die operatoren 0, +, * etc ueberlade und mit Vektor-Semantik fuelle.<br />
Hier starten nun also meine Probleme: Meine implementation sieht bisher also so aus:</p>
<pre><code class="language-cpp">myVector myVector::operator +(myVector val){ 
         myVector result; 
         //hier wird herumgerechnet
         return result; 
}
</code></pre>
<p>Nun habe ich also folgendes probiert (in der Hoffnung es wuerde klappen):</p>
<pre><code class="language-cpp">myVector y,x;
//y und x werden initialisiert
myVector x = y+z;
</code></pre>
<p>...und bekomme diesen Fehler hier:</p>
<p>error:<br />
main.cpp:123: error: no matching function for call to `myVector::<br />
myVector(myVector)'<br />
myVector.h:26: error: candidates are:<br />
myVectorr::myVector(myVector&amp;)</p>
<p>Was mache ich falsch? Liegt der Fehler im copy constructor? Dieser sieht so aus (der code an sich stimmt, pFeatVec ist ein array in myVector, dimension seine groesse):</p>
<pre><code class="language-cpp">myVector::myVector(myVector&amp; copy) {
	dimension = copy.size();
        pFeatVec = new float[dimension];
	for(int i=0;i&lt;dimension;i++)
	    pFeatVec[i] = copy[i];
}
</code></pre>
<p>Schonmal 1000 Dank, ich weiss hier einfach nicht weiter ...<br />
Gruesse<br />
Tim</p>
<p>PS: Ich bin mir auch noch ueber die implementation des = operators uneinig.. sollte der void sein? Diese frage ist aber im moment absolut unwichtig im vergleich zum rest ...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152005/operatoren-ueberladen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 22:40:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152005.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Jul 2006 17:37:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:37:27 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich wuerde gerne eine Art lineare-algebra vektor-klasse schreiben. Mit den instanzen dieser klasse sollte man rechnen koennen, ich wuerde also gerne diese myVector (nenne ich nun so, weil die klasse so heisst) addieren koennen, etc etc. Folgendes sollte also moegloch sein:</p>
<pre><code class="language-cpp">myVector x,y,z; 
//initialize vectors here... 
x = y+z;
</code></pre>
<p>Wenn ich also nichts falsch verstanden habe sollte dies moeglich sein indem ich die operatoren 0, +, * etc ueberlade und mit Vektor-Semantik fuelle.<br />
Hier starten nun also meine Probleme: Meine implementation sieht bisher also so aus:</p>
<pre><code class="language-cpp">myVector myVector::operator +(myVector val){ 
         myVector result; 
         //hier wird herumgerechnet
         return result; 
}
</code></pre>
<p>Nun habe ich also folgendes probiert (in der Hoffnung es wuerde klappen):</p>
<pre><code class="language-cpp">myVector y,x;
//y und x werden initialisiert
myVector x = y+z;
</code></pre>
<p>...und bekomme diesen Fehler hier:</p>
<p>error:<br />
main.cpp:123: error: no matching function for call to `myVector::<br />
myVector(myVector)'<br />
myVector.h:26: error: candidates are:<br />
myVectorr::myVector(myVector&amp;)</p>
<p>Was mache ich falsch? Liegt der Fehler im copy constructor? Dieser sieht so aus (der code an sich stimmt, pFeatVec ist ein array in myVector, dimension seine groesse):</p>
<pre><code class="language-cpp">myVector::myVector(myVector&amp; copy) {
	dimension = copy.size();
        pFeatVec = new float[dimension];
	for(int i=0;i&lt;dimension;i++)
	    pFeatVec[i] = copy[i];
}
</code></pre>
<p>Schonmal 1000 Dank, ich weiss hier einfach nicht weiter ...<br />
Gruesse<br />
Tim</p>
<p>PS: Ich bin mir auch noch ueber die implementation des = operators uneinig.. sollte der void sein? Diese frage ist aber im moment absolut unwichtig im vergleich zum rest ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089688</guid><dc:creator><![CDATA[timOS]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:44:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">myVector myVector::operator +(const myVector&amp; val)
</code></pre>
<p>(und eigentlich sollte operator+ ein freier Operator sein, kein Member, aber das ist ein anderes Thema).</p>
<pre><code class="language-cpp">myVector::myVector(const myVector&amp; copy)
</code></pre>
<p>Edit: Nicht mehr ganz so sicher, ob das wirklich die Ursache für dein Problem ist. Aber es sollte trotzdem so aussehen wie ich es hier geschrieben habe. Ansonsten gilt, mal ein Bißchen mehr Code zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089689</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:47:11 GMT]]></title><description><![CDATA[<p>timOS schrieb:</p>
<blockquote>
<pre><code class="language-cpp">myVector y,x;
//y und x werden initialisiert
myVector x = y+z;
</code></pre>
</blockquote>
<p>Wo kommt hier z her? Ganz oben stehts noch drin...</p>
<p>Edit: Defaultkonstruktor definiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089692</guid><dc:creator><![CDATA[Newow]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:47:53 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11589">@Z2</a>:<br />
wenn ich den code so aendere bekomme ich leider folgenden Fehler:</p>
<p>In copy constructor <code>myVector::myVector(const myVector&amp;)': myVector.cpp:34: error: passing \</code>const myVector' as `this' argument of `int myVector::size()' discards qualifiers</p>
<p>...nur leider kann ich damit ebensowenig anfangen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12207">@Newow</a>:<br />
Sorry, das sollte natuerlich myVector y,x,z; heissen und es werden auch alle drei initialisiert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089695</guid><dc:creator><![CDATA[TimOS]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:47:53 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:48:34 GMT]]></title><description><![CDATA[<p>Z2 schrieb:</p>
<blockquote>
<p>Nicht mehr ganz so sicher, ob das wirklich die Ursache für dein Problem ist.</p>
</blockquote>
<p>ja, ist es. das funktionsergebnis des +operators ist ein rvalue und kann folglich nur an referenzen auf const gebunden werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089697</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:49:28 GMT]]></title><description><![CDATA[<p>&lt;edit&gt; Defaultkonstruktor gibt es nicht, weil jeder Vector mit einer groesse/dimension erstellt wird... Diese wird an den Konstruktor uebergeben..<br />
&lt;/edit&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089701</guid><dc:creator><![CDATA[TimOS]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 17:50:00 GMT]]></title><description><![CDATA[<p>die size memberfunktion ist vermutlich nicht const und kann dann nur auf nicht-const objekte (also nicht auf dem argument des korrigierten copy-ctors) aufgerufen werden. zeig doch mal die definition dre klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089702</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 18:01:27 GMT]]></title><description><![CDATA[<p>TimOS schrieb:</p>
<blockquote>
<p>&lt;edit&gt; Defaultkonstruktor gibt es nicht, weil jeder Vector mit einer groesse/dimension erstellt wird... Diese wird an den Konstruktor uebergeben..<br />
&lt;/edit&gt;</p>
</blockquote>
<p>Laut deinem Code müsste es aber einen geben.<br />
Und zwar dafür:</p>
<blockquote>
<pre><code class="language-cpp">myVector myVector::operator +(myVector val){
         myVector result;
         //hier wird herumgerechnet
         return result;
}
</code></pre>
</blockquote>
<p>Edit(mal wieder): Also prinzipiell sollte dein Code compilierbar gewesen sein, zumindest das was hier zu sehen war. Zumindest ist mein Comipler so gnädig. Ist natürlich noch lange kein grund die Vorschläge weiter oben zu ignorieren, da du einige unnötige Kopieraktionen drin hast. Wenn die bisherigen Vorschläge nichts helfen, brauchts wirklich mehr Code hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089706</guid><dc:creator><![CDATA[Newow]]></dc:creator><pubDate>Sat, 01 Jul 2006 18:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Sat, 01 Jul 2006 18:00:57 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Z2 schrieb:</p>
<blockquote>
<p>Nicht mehr ganz so sicher, ob das wirklich die Ursache für dein Problem ist.</p>
</blockquote>
<p>ja, ist es. das funktionsergebnis des +operators ist ein rvalue und kann folglich nur an referenzen auf const gebunden werden.</p>
</blockquote>
<p>Ups. Hab übersehen, daß da der Copy-Konstruktor aufgerufen wird. Du hast natürlich Recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089712</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Sat, 01 Jul 2006 18:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Mon, 03 Jul 2006 12:24:48 GMT]]></title><description><![CDATA[<p>Sorry dass ich mich erst jetzt wieder melde, aber ich war gestern unterwegs..</p>
<p>Die jedenfalls voruebergehende Loesung fuer das Problem war die Methode size() auch als const zu definieren, nun kommt hierfuer kein Compilerfehler mehr.. Es stimmte also dass ich im copy-construktor auf eine nicht-const funktion des const-objektes zugegriffen habe und das war natuerlich quatsch. Ich habe nun also alle Member-Methoden die das Objekt nicht veraendern const gemacht. das war doch im Grunde richtig so oder nicht?</p>
<p>Seitdem ich aber die size-methode zu const definiert habe, habe ich die Probleme an anderer stelle. Ich hatte geohoffe, dass const als solches nicht die anderen aufrufe stoeren sollte.. leider etwas voreilig.</p>
<p>Seitdem size() (eine Methode die nur die derzeitige Groesse zurueckgibt) nun als const definiert ist bekomme ich fehler fuer alle anderen Verwendungen dieser Methode z.B.</p>
<p>Metric.o(.text+0x231):/home_stud/06/Metric.cpp:39: undefined reference to `FeatureVector::size()'<br />
//und diese Fehlermeldung natuerlich fuer alle nun const-Methoden..</p>
<p>Wie kann das kommen? Ich dachte const wuerde nur zeigen dass durch diese Methode das Objekt nict veraendert wird.. Muss ich solche Methoden nun anders aufrufen?</p>
<p>Vielen Dank fuer eure Hilfe,..<br />
Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090670</guid><dc:creator><![CDATA[TimOS]]></dc:creator><pubDate>Mon, 03 Jul 2006 12:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Mon, 03 Jul 2006 12:31:19 GMT]]></title><description><![CDATA[<p>TimOS schrieb:</p>
<blockquote>
<p>Ich habe nun also alle Member-Methoden die das Objekt nicht veraendern const gemacht. das war doch im Grunde richtig so oder nicht?</p>
</blockquote>
<p>Ja, das ist richtig so.</p>
<blockquote>
<p>Seitdem size() (eine Methode die nur die derzeitige Groesse zurueckgibt) nun als const definiert ist bekomme ich fehler fuer alle anderen Verwendungen dieser Methode z.B.</p>
<p>Metric.o(.text+0x231):/home_stud/06/Metric.cpp:39: undefined reference to `FeatureVector::size()'<br />
//und diese Fehlermeldung natuerlich fuer alle nun const-Methoden..</p>
<p>Wie kann das kommen? Ich dachte const wuerde nur zeigen dass durch diese Methode das Objekt nict veraendert wird.. Muss ich solche Methoden nun anders aufrufen?</p>
</blockquote>
<p>Hm, kann es sein, daß Du nur die Deklaration geändert hast, aber nicht die Definition? Die Syntax zum Aufruf ist identisch zu non-const Funktionen. Wenn Du eine Methode allerdings const deklarierst mußt Du auch in der Implementierung (die möglicherweise in der cpp-Datei steht) das const dazuschreiben, sonst sind das verschiedene Methoden.</p>
<p>MfG jester</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090674</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Mon, 03 Jul 2006 12:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Mon, 03 Jul 2006 12:44:16 GMT]]></title><description><![CDATA[<p>hatte ich auch schon ueberprueft, sind aber alle identisch ...</p>
<p>Z.B.<br />
deklaration:</p>
<pre><code class="language-cpp">int size() const;
</code></pre>
<p>implementation:</p>
<pre><code class="language-cpp">int FeatureVector::size() const{
        return dimension;
    }
</code></pre>
<p>evtl andere Vorschlaege? Oder ist hier etwas falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090682</guid><dc:creator><![CDATA[TimOS]]></dc:creator><pubDate>Mon, 03 Jul 2006 12:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Mon, 03 Jul 2006 12:48:17 GMT]]></title><description><![CDATA[<p>hier noch der Aufruf der Methode aus einer anderen Klasse:</p>
<pre><code class="language-cpp">float Metric::test(FeatureVector* fv1, FeatureVector* fv2, FeatureVector* lambda) {
    for (int i=0;i&lt;fv1-&gt;size();i++) {
        //do something
    }
    return 1;
}
</code></pre>
<p>PS: Diese Methoede ist nur ein test-dummy,.. also nicht ueber das return oder aehnliches aufregen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090683</guid><dc:creator><![CDATA[TimOS]]></dc:creator><pubDate>Mon, 03 Jul 2006 12:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren + * = ueberladen on Mon, 03 Jul 2006 13:14:29 GMT]]></title><description><![CDATA[<p>make clean hat es gerichtet... danke fuer eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090699</guid><dc:creator><![CDATA[TimOS]]></dc:creator><pubDate>Mon, 03 Jul 2006 13:14:29 GMT</pubDate></item></channel></rss>