<?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[ambiguos overload error bei operatorüberladung...brauche hilfe]]></title><description><![CDATA[<p>hallo,<br />
wir sitzen grad an einem matrizenprojekt in dem wir mit operatorüberladung arbeiten sollen.wir haben den * operator für matrizenoperation überladen,das ging eigentlich auch immer bis wir templates für die typenunabhängigkeit eingebunden haben nun bekomme ich immer folgenden fehler</p>
<p>ambiguous overload for 'operator*' in 'm1 * m2'</p>
<p>hier mal unser quelltext<br />
header</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

template&lt;class T&gt; class P_matrix;                   // Vorwärtsdeklaration der Klasse - vorherige Bekanntmachung der Klasse damit die friend Funktionen diese kennen
template&lt;class T&gt; ostream &amp; operator &lt;&lt; (ostream &amp; os, const P_matrix&lt;T&gt; &amp;m);  // Bekanntmachung das es die Operatoren als Template gibt, um diese in der Klasse als friend erklären zu können
template&lt;class T&gt; P_matrix&lt;T&gt; operator * (const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B);
template&lt;class T&gt; P_matrix&lt;T&gt; operator + (const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B);

struct newline{};

template &lt;class T&gt;            // dies ist eine Template-Klasse
class P_matrix {              

private:
	vector&lt;vector&lt;T&gt; &gt; mv;    // Matrixvektor
	vector&lt;T&gt; l_vektor;       // Lösungsvektor (hiermit wird die Matrix für Gauss zusammengebaut - Lösung in der letzten Spalte der Matrix)
	vector&lt;T&gt; erg_vec;        // Ergebnisvektor für die Rückauflösung (Ergebnis nach Anwendung des Gauss-Algorithmus auf die Matrix)
    int index;                // Durchläuft die Matrix bei der Eingabe
    T Determinante;     // Hier wird der Wert der Determinante gespeichert 

public:
	P_matrix(void);                                         // erstellt den ersten Zeilenvektor der Matrix und initialisiert die Variable index für die Eingabe
    //P_matrix(int n, int m);
    //~matrix(void);

	void set_determinante();                                // Errechnet die Determinante einer nxn Matrix
    T get_determinante();
    void Zeilenumformung();                                 // Bilden der Dreiecksmatrix (Nullen erstellen)
    void Rueckaufloesung();                                 // Errechnen der Ergebnisse und füllen des Ergebnisvektors
    void Vertausche(int z1, int z2);                        // Vertauschen zweier übergebenen Zeilen in der Matrix
    void Ergebnisausgabe();                                 // Ausgabe des Ergebnisvektors
    void pivot(int zeile,int spalte);                       // ermittelt das Pivotelement (rekursiv)

    P_matrix&amp; operator &gt;&gt; (const T WERT);                    // Anhängen eines Wertes an die Matrix
	P_matrix&amp; operator &gt;&gt; (const struct newline N);         // Erstellt einen neuen Zeilenvektor für die Matrix
	P_matrix&amp; operator += (const P_matrix &amp;MATRIX);         // Addiert eine Matrix auf eine andere
	P_matrix&amp; operator *= (const P_matrix &amp;MATRIX);         // Multipliziert eine Matrix auf eine andere
	friend ostream &amp; operator &lt;&lt; &lt;&gt;(ostream &amp; os, const P_matrix&lt;T&gt; &amp;m);     // Ausgabe einer Matrix über den ostream Operator
	friend P_matrix&lt;T&gt; operator * &lt;&gt;(const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B);      // Multiplikation zweier Matritzen in eine Ergebnismatrix
	friend P_matrix operator + &lt;&gt;(const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B);               // Addition zweier Matrizen in eine Ergebnismatrix

};
</code></pre>
<p>cpp(nur die überladung des * operators)</p>
<pre><code class="language-cpp">...
//// Multiplikation zweier Matrizen in eine Ergebnismatrix /////////////////////

template&lt;class T&gt;
P_matrix&lt;T&gt; &amp; operator * (const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B)
{
         double hilf=0;                                       //Index-Variablen um durch die Matrix zu laufen
         P_matrix&lt;T&gt; m_tmp;
         newline nz;      

for (int k=0; k&lt;MATRIX_A.mv.size()-1;k++)   
{
         for (int i=0; i&lt;MATRIX_B.mv[1].size();i++)              //Zeilenvorschub
                   {   
                for (int j=0; j&lt;MATRIX_A.mv[k].size();j++)    //Spaltenvorschub
                {

                  hilf+=MATRIX_A.mv[k][j]*MATRIX_B.mv[j][i];

                }
                m_tmp &gt;&gt; hilf;
                hilf=0;
          }
        m_tmp &gt;&gt; nz;
}

          return m_tmp;

...
}
</code></pre>
<p>und wie ichs in der main aufrufe</p>
<pre><code class="language-cpp">_matrix&lt;double&gt; m1,m2,m3;

                         cout&lt;&lt;&quot;Matrizenmuliplikation:&quot;&lt;&lt;endl;

                         int help=1;
                         fflush(stdin);                                          // Tastaturbuffer leeren

cout&lt;&lt;&quot;Bitte geben Sie eine Matrix ein&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;Sie können die Werte pro Zeile direkt nacheinander durch Leerzeichen oder Tab getrennt eingeben&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;Wenn Sie fertig mit der eingabe sind drücken Sie einfach Enter ohne neue Werte einzugeben&quot;&lt;&lt;endl;
                         cout&lt;&lt;endl;

while(help != 0)
{
    string line;               
    getline(cin, line);

    stringstream sstr;
    sstr &lt;&lt; line;

    double wert;
    vector&lt;int&gt; v;

    while (sstr &gt;&gt; wert)
    {
         //cout&lt;&lt;&quot;string:&quot;&lt;&lt;wert&lt;&lt;endl;
        v.push_back(wert);

    }
for(int z=0;z&lt;v.size();z++)
{
        m1&gt;&gt;v[z];

}
m1&gt;&gt;nz;
help=v.size();
} 

cout&lt;&lt;&quot;Bitte geben Sie die zweite Matrix ein&quot;&lt;&lt;endl;                       
help=1;
while(help != 0)
{
    string line;               
    getline(cin, line);

    stringstream sstr;
    sstr &lt;&lt; line;

    double wert;
    vector&lt;int&gt; v;

    while (sstr &gt;&gt; wert)
    {

        v.push_back(wert);

    }
for(int z=0;z&lt;v.size();z++)
{
        m2&gt;&gt;v[z];

}
m2&gt;&gt;nz;
help=v.size();
} 

   m3=m1*m2;

   cout&lt;&lt;m3;
</code></pre>
<p>weiß wer wovon der fehler kommt und wie man ihn wegbekommt?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215313/ambiguos-overload-error-bei-operatorüberladung-brauche-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 16:53:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215313.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Jun 2008 12:42:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ambiguos overload error bei operatorüberladung...brauche hilfe on Mon, 09 Jun 2008 12:42:53 GMT]]></title><description><![CDATA[<p>hallo,<br />
wir sitzen grad an einem matrizenprojekt in dem wir mit operatorüberladung arbeiten sollen.wir haben den * operator für matrizenoperation überladen,das ging eigentlich auch immer bis wir templates für die typenunabhängigkeit eingebunden haben nun bekomme ich immer folgenden fehler</p>
<p>ambiguous overload for 'operator*' in 'm1 * m2'</p>
<p>hier mal unser quelltext<br />
header</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

template&lt;class T&gt; class P_matrix;                   // Vorwärtsdeklaration der Klasse - vorherige Bekanntmachung der Klasse damit die friend Funktionen diese kennen
template&lt;class T&gt; ostream &amp; operator &lt;&lt; (ostream &amp; os, const P_matrix&lt;T&gt; &amp;m);  // Bekanntmachung das es die Operatoren als Template gibt, um diese in der Klasse als friend erklären zu können
template&lt;class T&gt; P_matrix&lt;T&gt; operator * (const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B);
template&lt;class T&gt; P_matrix&lt;T&gt; operator + (const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B);

struct newline{};

template &lt;class T&gt;            // dies ist eine Template-Klasse
class P_matrix {              

private:
	vector&lt;vector&lt;T&gt; &gt; mv;    // Matrixvektor
	vector&lt;T&gt; l_vektor;       // Lösungsvektor (hiermit wird die Matrix für Gauss zusammengebaut - Lösung in der letzten Spalte der Matrix)
	vector&lt;T&gt; erg_vec;        // Ergebnisvektor für die Rückauflösung (Ergebnis nach Anwendung des Gauss-Algorithmus auf die Matrix)
    int index;                // Durchläuft die Matrix bei der Eingabe
    T Determinante;     // Hier wird der Wert der Determinante gespeichert 

public:
	P_matrix(void);                                         // erstellt den ersten Zeilenvektor der Matrix und initialisiert die Variable index für die Eingabe
    //P_matrix(int n, int m);
    //~matrix(void);

	void set_determinante();                                // Errechnet die Determinante einer nxn Matrix
    T get_determinante();
    void Zeilenumformung();                                 // Bilden der Dreiecksmatrix (Nullen erstellen)
    void Rueckaufloesung();                                 // Errechnen der Ergebnisse und füllen des Ergebnisvektors
    void Vertausche(int z1, int z2);                        // Vertauschen zweier übergebenen Zeilen in der Matrix
    void Ergebnisausgabe();                                 // Ausgabe des Ergebnisvektors
    void pivot(int zeile,int spalte);                       // ermittelt das Pivotelement (rekursiv)

    P_matrix&amp; operator &gt;&gt; (const T WERT);                    // Anhängen eines Wertes an die Matrix
	P_matrix&amp; operator &gt;&gt; (const struct newline N);         // Erstellt einen neuen Zeilenvektor für die Matrix
	P_matrix&amp; operator += (const P_matrix &amp;MATRIX);         // Addiert eine Matrix auf eine andere
	P_matrix&amp; operator *= (const P_matrix &amp;MATRIX);         // Multipliziert eine Matrix auf eine andere
	friend ostream &amp; operator &lt;&lt; &lt;&gt;(ostream &amp; os, const P_matrix&lt;T&gt; &amp;m);     // Ausgabe einer Matrix über den ostream Operator
	friend P_matrix&lt;T&gt; operator * &lt;&gt;(const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B);      // Multiplikation zweier Matritzen in eine Ergebnismatrix
	friend P_matrix operator + &lt;&gt;(const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B);               // Addition zweier Matrizen in eine Ergebnismatrix

};
</code></pre>
<p>cpp(nur die überladung des * operators)</p>
<pre><code class="language-cpp">...
//// Multiplikation zweier Matrizen in eine Ergebnismatrix /////////////////////

template&lt;class T&gt;
P_matrix&lt;T&gt; &amp; operator * (const P_matrix&lt;T&gt; &amp;MATRIX_A, const P_matrix&lt;T&gt; &amp;MATRIX_B)
{
         double hilf=0;                                       //Index-Variablen um durch die Matrix zu laufen
         P_matrix&lt;T&gt; m_tmp;
         newline nz;      

for (int k=0; k&lt;MATRIX_A.mv.size()-1;k++)   
{
         for (int i=0; i&lt;MATRIX_B.mv[1].size();i++)              //Zeilenvorschub
                   {   
                for (int j=0; j&lt;MATRIX_A.mv[k].size();j++)    //Spaltenvorschub
                {

                  hilf+=MATRIX_A.mv[k][j]*MATRIX_B.mv[j][i];

                }
                m_tmp &gt;&gt; hilf;
                hilf=0;
          }
        m_tmp &gt;&gt; nz;
}

          return m_tmp;

...
}
</code></pre>
<p>und wie ichs in der main aufrufe</p>
<pre><code class="language-cpp">_matrix&lt;double&gt; m1,m2,m3;

                         cout&lt;&lt;&quot;Matrizenmuliplikation:&quot;&lt;&lt;endl;

                         int help=1;
                         fflush(stdin);                                          // Tastaturbuffer leeren

cout&lt;&lt;&quot;Bitte geben Sie eine Matrix ein&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;Sie können die Werte pro Zeile direkt nacheinander durch Leerzeichen oder Tab getrennt eingeben&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;Wenn Sie fertig mit der eingabe sind drücken Sie einfach Enter ohne neue Werte einzugeben&quot;&lt;&lt;endl;
                         cout&lt;&lt;endl;

while(help != 0)
{
    string line;               
    getline(cin, line);

    stringstream sstr;
    sstr &lt;&lt; line;

    double wert;
    vector&lt;int&gt; v;

    while (sstr &gt;&gt; wert)
    {
         //cout&lt;&lt;&quot;string:&quot;&lt;&lt;wert&lt;&lt;endl;
        v.push_back(wert);

    }
for(int z=0;z&lt;v.size();z++)
{
        m1&gt;&gt;v[z];

}
m1&gt;&gt;nz;
help=v.size();
} 

cout&lt;&lt;&quot;Bitte geben Sie die zweite Matrix ein&quot;&lt;&lt;endl;                       
help=1;
while(help != 0)
{
    string line;               
    getline(cin, line);

    stringstream sstr;
    sstr &lt;&lt; line;

    double wert;
    vector&lt;int&gt; v;

    while (sstr &gt;&gt; wert)
    {

        v.push_back(wert);

    }
for(int z=0;z&lt;v.size();z++)
{
        m2&gt;&gt;v[z];

}
m2&gt;&gt;nz;
help=v.size();
} 

   m3=m1*m2;

   cout&lt;&lt;m3;
</code></pre>
<p>weiß wer wovon der fehler kommt und wie man ihn wegbekommt?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525713</guid><dc:creator><![CDATA[Braineater]]></dc:creator><pubDate>Mon, 09 Jun 2008 12:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to ambiguos overload error bei operatorüberladung...brauche hilfe on Mon, 09 Jun 2008 13:11:12 GMT]]></title><description><![CDATA[<p>In der Vorwärtsdeklaration des Operators operator* gebt ihr ein Matrix&lt;T&gt; Objekt zurück. Bei der Implementierung steht dann aber eine Referenz Matrix&lt;T&gt;&amp;. Deshalb die Fehlermeldung wegen des mehrdeutigen Typs des Operators.</p>
<p>Gruß, smasher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525729</guid><dc:creator><![CDATA[smasher1985@uni]]></dc:creator><pubDate>Mon, 09 Jun 2008 13:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to ambiguos overload error bei operatorüberladung...brauche hilfe on Mon, 09 Jun 2008 14:22:35 GMT]]></title><description><![CDATA[<p>danke nun gehts wieder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525768</guid><dc:creator><![CDATA[Braineater]]></dc:creator><pubDate>Mon, 09 Jun 2008 14:22:35 GMT</pubDate></item></channel></rss>