<?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[Templateklasse Matrix, Overloading der Multiplikation]]></title><description><![CDATA[<p>Gude! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Ich habe eine template&lt;typename T,int m, int n&gt; Klasse Matrix erstellt und stehe nun vor dem Problem der Multiplikation zweier Matrizen zu einer neuen Matrix.</p>
<p>Der überladene Operator &quot;*&quot; akzeptiert nicht auf der rechten Seite eine &lt;int,4,3&gt; und auf der linken Seite eine &lt;int,3,3&gt; Matrix.<br />
Ist ja irgendwo auch logisch, da der Template Klasse m=4 und n=3 übergeben wird.<br />
Allerdings sehe ich im Moment keine Möglichkeit das zu umgehen, zwei Template Listen werden ja nicht akzeptiert.</p>
<p>Klasse Matrix:</p>
<pre><code>template&lt;typename T, int m, int n&gt;
class Matrix{
public:
	Matrix();
	~Matrix();
	T values[m][n];	
	int m1 = m;
	int n1 = n;
	T&amp; operator()(int j,int k)const;
	T&amp; operator()(int j,int k);
	Matrix operator+(Matrix&amp; mat) const;
	Matrix operator*(Matrix&amp; mat) const;
	T min();
	T max();
};
</code></pre>
<p>Methode operator*:</p>
<pre><code>template&lt;typename T, int m,int n&gt;
Matrix&lt;T,m,n&gt; Matrix&lt;T,m,n&gt;::operator *(Matrix&amp; mat) const {
	//Multiplikation nur moeglich wenn Spaltenzahl(n) Matrix1 = Zeilenzahl Matrix2(m1)
	if (n != mat.m1) {
		std::cout &lt;&lt; &quot;UNGUELTIGE MULTIPLIKATION!\n&quot; &lt;&lt; std::endl;
	}
	Matrix&lt;T,m,n&gt; result;
	T res = 0;
	for (int m0 = 0; m0 &lt; m; m0++) {
		for (int n0 = 0; n0 &lt; mat.n1; n0++) {
			res = 0;
			for (int a = 0; a &lt; m; a++) {
				res += values[m0][a] * mat.values[a][n0];
				result.values[m0][n0] = res;
			}
		}
	}
	return result;
}
</code></pre>
<p>Vielleicht kann jemand helfen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Ich verwende MVS Community 2015</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335820/templateklasse-matrix-overloading-der-multiplikation</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 03:50:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335820.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Dec 2015 17:03:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templateklasse Matrix, Overloading der Multiplikation on Sun, 13 Dec 2015 17:03:19 GMT]]></title><description><![CDATA[<p>Gude! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Ich habe eine template&lt;typename T,int m, int n&gt; Klasse Matrix erstellt und stehe nun vor dem Problem der Multiplikation zweier Matrizen zu einer neuen Matrix.</p>
<p>Der überladene Operator &quot;*&quot; akzeptiert nicht auf der rechten Seite eine &lt;int,4,3&gt; und auf der linken Seite eine &lt;int,3,3&gt; Matrix.<br />
Ist ja irgendwo auch logisch, da der Template Klasse m=4 und n=3 übergeben wird.<br />
Allerdings sehe ich im Moment keine Möglichkeit das zu umgehen, zwei Template Listen werden ja nicht akzeptiert.</p>
<p>Klasse Matrix:</p>
<pre><code>template&lt;typename T, int m, int n&gt;
class Matrix{
public:
	Matrix();
	~Matrix();
	T values[m][n];	
	int m1 = m;
	int n1 = n;
	T&amp; operator()(int j,int k)const;
	T&amp; operator()(int j,int k);
	Matrix operator+(Matrix&amp; mat) const;
	Matrix operator*(Matrix&amp; mat) const;
	T min();
	T max();
};
</code></pre>
<p>Methode operator*:</p>
<pre><code>template&lt;typename T, int m,int n&gt;
Matrix&lt;T,m,n&gt; Matrix&lt;T,m,n&gt;::operator *(Matrix&amp; mat) const {
	//Multiplikation nur moeglich wenn Spaltenzahl(n) Matrix1 = Zeilenzahl Matrix2(m1)
	if (n != mat.m1) {
		std::cout &lt;&lt; &quot;UNGUELTIGE MULTIPLIKATION!\n&quot; &lt;&lt; std::endl;
	}
	Matrix&lt;T,m,n&gt; result;
	T res = 0;
	for (int m0 = 0; m0 &lt; m; m0++) {
		for (int n0 = 0; n0 &lt; mat.n1; n0++) {
			res = 0;
			for (int a = 0; a &lt; m; a++) {
				res += values[m0][a] * mat.values[a][n0];
				result.values[m0][n0] = res;
			}
		}
	}
	return result;
}
</code></pre>
<p>Vielleicht kann jemand helfen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Ich verwende MVS Community 2015</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479367</guid><dc:creator><![CDATA[FaultyBrain]]></dc:creator><pubDate>Sun, 13 Dec 2015 17:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to Templateklasse Matrix, Overloading der Multiplikation on Sun, 13 Dec 2015 18:57:16 GMT]]></title><description><![CDATA[<p>FaultyBrain schrieb:</p>
<blockquote>
<p>zwei Template Listen werden ja nicht akzeptiert.</p>
</blockquote>
<p>Doch?</p>
<pre><code>template &lt;typename T, int M, int N&gt; class Matrix
{
  template&lt;int K&gt; Matrix&lt;T, M, K&gt; operator*(const Matrix&lt;T, N, K&gt;&amp;);
};

template&lt;typename T, int M, int N&gt; template&lt;int K&gt; Matrix&lt;T, M, K&gt; Matrix&lt;T, M, N&gt;::operator*(const Matrix&lt;T, N, K&gt;&amp;) { /* ... */ }
</code></pre>
<p>Oder direkt in der Klasse implementiert:</p>
<pre><code>template &lt;typename T, int M, int N&gt; class Matrix
{
  template&lt;int K&gt; Matrix&lt;T, M, K&gt; operator*(const Matrix&lt;T, N, K&gt;&amp;) { /* ... */ }
};
</code></pre>
<p><strong>Aber:</strong> Der zweiseitige Operator* sollte wohl sowieso eine freie Funktion sein:</p>
<pre><code>template&lt;typename T, int M, int N, int K&gt; Matrix&lt;T, M, K&gt; operator*(const Matrix&lt;T, M, N&gt; &amp;, const Matrix&lt;T, N, K&gt;&amp;) { /* ... */ }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2479385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479385</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 13 Dec 2015 18:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to Templateklasse Matrix, Overloading der Multiplikation on Mon, 14 Dec 2015 08:09:03 GMT]]></title><description><![CDATA[<p>Danke, war nur ein Syntaxfehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479433</guid><dc:creator><![CDATA[FaultyBrain]]></dc:creator><pubDate>Mon, 14 Dec 2015 08:09:03 GMT</pubDate></item></channel></rss>