<?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[Template-Klasse mit überladenen Operatoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade an deiner Klasse dran die eine Matrix realisiert.</p>
<p>Das Problem bezieht sich auf die Operatoren *, nutzt man diese bekommt man eine Fehlermeldung (siehe &quot;Code&quot;), dass die Operatoren mehrdeutig sind.<br />
Bei den Elementbezogen Operatoren += tritt dieses Problem nicht auf, dort wird zwischen dem Matrix/Matrix und Matrix/Skalar Operator korrekt unterschieden.</p>
<p>Hat jemand eine Idee?</p>
<p>Vielen Dank im Voraus... <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>
<pre><code>template&lt;typename TemplateType&gt;
class CMatrix
{
public:
…

// Elementbezogen
void operator*=(CMatrix const&amp; right_mat);

void operator*=(TemplateType const&amp; skalar);

// Global
template&lt;typename TemplateType&gt;
friend CMatrix operator*(CMatrix const&amp; left_mat, CMatrix const&amp; right_mat);

template&lt;typename TemplateType&gt;
friend CMatrix operator*(CMatrix const&amp; left_mat, TemplateType const&amp; skalar);

protected:
…
private:
…
};

template&lt;typename TemplateType&gt;
void CMatrix&lt;TemplateType&gt;::operator*=(CMatrix&lt;TemplateType&gt; const&amp; right_mat)
{	
	//...
}
template&lt;typename TemplateType&gt;
void CMatrix&lt;TemplateType&gt;::operator*=(TemplateType const&amp; skalar)
{	
	//...
}

template&lt;typename TemplateType&gt;
CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, CMatrix&lt;TemplateType&gt; const&amp; right_mat)
{	
	//...
}

template&lt;typename TemplateType&gt;
CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, TemplateType const&amp; skalar)
{
	//...
}
</code></pre>
<pre><code>IntelliSense: Mehr als ein &quot;*&quot;-Operator stimmt mit diesen Operanden überein:
Funktionsvorlage &quot;CMatrix&lt;double&gt; operator*(const CMatrix&lt;double&gt; &amp;left_mat, const TemplateType &amp;skalar)&quot;
Funktionsvorlage &quot;CMatrix&lt;TemplateType&gt; operator*(const CMatrix&lt;TemplateType&gt; &amp;left_mat, const CMatrix&lt;TemplateType&gt; &amp;right_mat)&quot;
Operandentypen sind: CMatrix&lt;double&gt; * CMatrix&lt;double&gt;	d:\Cpp\Projekte\CMatrix\Quelle.cpp	96
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/326650/template-klasse-mit-überladenen-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 14:20:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326650.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Jun 2014 08:20:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Klasse mit überladenen Operatoren on Sun, 29 Jun 2014 08:25:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade an deiner Klasse dran die eine Matrix realisiert.</p>
<p>Das Problem bezieht sich auf die Operatoren *, nutzt man diese bekommt man eine Fehlermeldung (siehe &quot;Code&quot;), dass die Operatoren mehrdeutig sind.<br />
Bei den Elementbezogen Operatoren += tritt dieses Problem nicht auf, dort wird zwischen dem Matrix/Matrix und Matrix/Skalar Operator korrekt unterschieden.</p>
<p>Hat jemand eine Idee?</p>
<p>Vielen Dank im Voraus... <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>
<pre><code>template&lt;typename TemplateType&gt;
class CMatrix
{
public:
…

// Elementbezogen
void operator*=(CMatrix const&amp; right_mat);

void operator*=(TemplateType const&amp; skalar);

// Global
template&lt;typename TemplateType&gt;
friend CMatrix operator*(CMatrix const&amp; left_mat, CMatrix const&amp; right_mat);

template&lt;typename TemplateType&gt;
friend CMatrix operator*(CMatrix const&amp; left_mat, TemplateType const&amp; skalar);

protected:
…
private:
…
};

template&lt;typename TemplateType&gt;
void CMatrix&lt;TemplateType&gt;::operator*=(CMatrix&lt;TemplateType&gt; const&amp; right_mat)
{	
	//...
}
template&lt;typename TemplateType&gt;
void CMatrix&lt;TemplateType&gt;::operator*=(TemplateType const&amp; skalar)
{	
	//...
}

template&lt;typename TemplateType&gt;
CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, CMatrix&lt;TemplateType&gt; const&amp; right_mat)
{	
	//...
}

template&lt;typename TemplateType&gt;
CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, TemplateType const&amp; skalar)
{
	//...
}
</code></pre>
<pre><code>IntelliSense: Mehr als ein &quot;*&quot;-Operator stimmt mit diesen Operanden überein:
Funktionsvorlage &quot;CMatrix&lt;double&gt; operator*(const CMatrix&lt;double&gt; &amp;left_mat, const TemplateType &amp;skalar)&quot;
Funktionsvorlage &quot;CMatrix&lt;TemplateType&gt; operator*(const CMatrix&lt;TemplateType&gt; &amp;left_mat, const CMatrix&lt;TemplateType&gt; &amp;right_mat)&quot;
Operandentypen sind: CMatrix&lt;double&gt; * CMatrix&lt;double&gt;	d:\Cpp\Projekte\CMatrix\Quelle.cpp	96
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406150</guid><dc:creator><![CDATA[b3n3]]></dc:creator><pubDate>Sun, 29 Jun 2014 08:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse mit überladenen Operatoren on Sun, 29 Jun 2014 08:35:43 GMT]]></title><description><![CDATA[<p>b3n3 schrieb:</p>
<blockquote>
<pre><code>template&lt;typename TemplateType&gt;
friend CMatrix operator*(CMatrix const&amp; left_mat, CMatrix const&amp; right_mat);

template&lt;typename TemplateType&gt;
friend CMatrix operator*(CMatrix const&amp; left_mat, TemplateType const&amp; skalar);
</code></pre>
</blockquote>
<p>-&gt;</p>
<pre><code>template&lt;typename TemplateType&gt;
friend CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, CMatrix&lt;TemplateType&gt; const&amp; right_mat);

template&lt;typename TemplateType&gt;
friend CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, TemplateType const&amp; skalar);
</code></pre>
<p>Sonst gibt es nämlich folgende Operatoren:</p>
<pre><code>template &lt;typename TemplateType&gt;
CMatrix&lt;double&gt; operator*(CMatrix&lt;double&gt; const&amp;, CMatrix&lt;double&gt; const &amp;); (1)
template &lt;typename TemplateType&gt;
CMatrix&lt;double&gt; operator*(CMatrix&lt;double&gt; const&amp;, TemplateType const &amp;); (2)
template&lt;typename TemplateType&gt;
CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, CMatrix&lt;TemplateType&gt; const&amp; right_mat); (3)
template&lt;typename TemplateType&gt;
CMatrix&lt;TemplateType&gt; operator*(CMatrix&lt;TemplateType&gt; const&amp; left_mat, TemplateType const&amp; skalar); (4)
</code></pre>
<p>(1) scheidet direkt aus, weil man dort selber ein Template Argument angeben muss, aber (2) und (3) sind gleichwertig.<br />
BTW: Prefixe deine Klassen nicht mit C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406151</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 29 Jun 2014 08:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse mit überladenen Operatoren on Sun, 29 Jun 2014 08:47:24 GMT]]></title><description><![CDATA[<p>Alles klar, danke!</p>
<p>Hatte verdrängt, dass er bei den friend Operatoren seperate Templates erstellt.</p>
<p>PS: Das C-Präfix ist nicht auf meinem Mist gewachsen, vorgegebene Konvention <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/2406152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406152</guid><dc:creator><![CDATA[b3n3]]></dc:creator><pubDate>Sun, 29 Jun 2014 08:47:24 GMT</pubDate></item></channel></rss>