<?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[Problem mit Argument-Übergabe in Matrix Template Klasse]]></title><description><![CDATA[<p>moin moin<br />
In meiner selbstgeschriebenen Matrix Klasse bekomme ich immer eine Fehlermeldung bei einer Funktion.<br />
Erstmal die Klasse:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class Matrix
{
   private:
    size_t X;
    size_t Y;
    T** pointer; //2D Array bildet die Matrix

   public:
    //Konstruktoren, Kopierkonstruktor, Destruktor, Zuweisungsoperator usw

    long double winkel(const Matrix&amp; obj); //winkel zwischen 2 vektoren, HIER LIEGT DER FEHLER
    T skalarprodukt(const Matrix&amp; obj);
    long double betrag(); //bzw. länge
};
</code></pre>
<p>Die Funktion zum Berechnen des Betrags:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; long double Matrix&lt;T&gt;::betrag()
{
    T sum=0;
    for(size_t y=0;y!=Y;++y)
        sum+=(pointer[0][y]*pointer[0][y]);
    long double bet=0;
    bet=std::sqrt(sum);
    return bet;
}
</code></pre>
<p>Die Funktion zum Berechnen des Winkels:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; long double Matrix&lt;T&gt;::winkel(const Matrix&amp; obj)
{
    const long double pi = 3.14159265;

    T skalar = (*this).skalarprodukt(obj); // kein Fehler
    long double betr =(*this).betrag() + obj.betrag(); // HIER DER FEHLER

    long double wink=std::acos(skalar/betr);
    return (wink*=(180/pi));
}
</code></pre>
<p>Wenn ich jetzt folgendes Berechnen will</p>
<pre><code class="language-cpp">int main()
{
    Matrix&lt;int&gt; a(3,1);
    Matrix&lt;int&gt; b(3,1);
    long double c=a.winkel(b);
}
</code></pre>
<p>bekomme ich folgende Fehlermeldung:</p>
<p>CodeBlocks:</p>
<pre><code>[b]error: passing `const Matrix&lt;int&gt;' as `this' argument of `long double Matrix&lt;T&gt;::betrag() [with T = int]' discards qualifiers Process [/b]
</code></pre>
<p>Visual C++ 2008</p>
<pre><code>[b]error C2662: 'Matrix&lt;T&gt;::betrag': this-Zeiger kann nicht von 'const Matrix&lt;T&gt;' in 'Matrix&lt;T&gt; &amp;' konvertiert werden
with [ T=int ]
Durch die Konvertierung gehen Qualifizierer verloren[/b]
</code></pre>
<p>Sieht jemand woran das liegt <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237385/problem-mit-argument-übergabe-in-matrix-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 13:17:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237385.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Mar 2009 03:55:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Argument-Übergabe in Matrix Template Klasse on Sat, 28 Mar 2009 03:55:09 GMT]]></title><description><![CDATA[<p>moin moin<br />
In meiner selbstgeschriebenen Matrix Klasse bekomme ich immer eine Fehlermeldung bei einer Funktion.<br />
Erstmal die Klasse:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class Matrix
{
   private:
    size_t X;
    size_t Y;
    T** pointer; //2D Array bildet die Matrix

   public:
    //Konstruktoren, Kopierkonstruktor, Destruktor, Zuweisungsoperator usw

    long double winkel(const Matrix&amp; obj); //winkel zwischen 2 vektoren, HIER LIEGT DER FEHLER
    T skalarprodukt(const Matrix&amp; obj);
    long double betrag(); //bzw. länge
};
</code></pre>
<p>Die Funktion zum Berechnen des Betrags:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; long double Matrix&lt;T&gt;::betrag()
{
    T sum=0;
    for(size_t y=0;y!=Y;++y)
        sum+=(pointer[0][y]*pointer[0][y]);
    long double bet=0;
    bet=std::sqrt(sum);
    return bet;
}
</code></pre>
<p>Die Funktion zum Berechnen des Winkels:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; long double Matrix&lt;T&gt;::winkel(const Matrix&amp; obj)
{
    const long double pi = 3.14159265;

    T skalar = (*this).skalarprodukt(obj); // kein Fehler
    long double betr =(*this).betrag() + obj.betrag(); // HIER DER FEHLER

    long double wink=std::acos(skalar/betr);
    return (wink*=(180/pi));
}
</code></pre>
<p>Wenn ich jetzt folgendes Berechnen will</p>
<pre><code class="language-cpp">int main()
{
    Matrix&lt;int&gt; a(3,1);
    Matrix&lt;int&gt; b(3,1);
    long double c=a.winkel(b);
}
</code></pre>
<p>bekomme ich folgende Fehlermeldung:</p>
<p>CodeBlocks:</p>
<pre><code>[b]error: passing `const Matrix&lt;int&gt;' as `this' argument of `long double Matrix&lt;T&gt;::betrag() [with T = int]' discards qualifiers Process [/b]
</code></pre>
<p>Visual C++ 2008</p>
<pre><code>[b]error C2662: 'Matrix&lt;T&gt;::betrag': this-Zeiger kann nicht von 'const Matrix&lt;T&gt;' in 'Matrix&lt;T&gt; &amp;' konvertiert werden
with [ T=int ]
Durch die Konvertierung gehen Qualifizierer verloren[/b]
</code></pre>
<p>Sieht jemand woran das liegt <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687224</guid><dc:creator><![CDATA[Mtrx]]></dc:creator><pubDate>Sat, 28 Mar 2009 03:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Argument-Übergabe in Matrix Template Klasse on Sat, 28 Mar 2009 04:04:11 GMT]]></title><description><![CDATA[<p><code>long double betrag(); //bzw. länge</code></p>
<p>muss einfach mal const sein... sonst geht es schlecht, nen konstantes objekt zu übergeben und dann die fkt aufzurufen (wie du es ja versucht hast)...<br />
außerdem würd ich die funktionen nicht als member-fkt implementieren, sondern eben als freie fkt...</p>
<p>bb</p>
<p>PS:</p>
<pre><code class="language-cpp">long double bet=0;
    bet=std::sqrt(sum);
    return bet;
</code></pre>
<p>was spricht ggn:</p>
<pre><code class="language-cpp">return std::sqrt(sum);
</code></pre>
<p>edit:</p>
<pre><code class="language-cpp">(*this).skalarprodukt(obj);

this-&gt;skalarprodukt(obj);
</code></pre>
<p>was ist hübscher? ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687226</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 28 Mar 2009 04:04:11 GMT</pubDate></item></channel></rss>