<?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[templates + operatorüberladung = problem ;-)]]></title><description><![CDATA[<p>hi leutz,<br />
hab da ein kleines problem, ich hab mir eine Matrixklasse definiert und wollte mir da einige operatoren zu definieren, jedoch bekomme ich eine mehrdeutigkeitsfehlermeldung, die ich mir nicht ganz erklären kann.</p>
<p>verwenden tue ich: VC++ 6.0</p>
<p>Fragmente aus der Klassendefinition:</p>
<pre><code>template &lt;class T, unsigned int N, unsigned int M&gt;
class KMatrix
{ ... };

template &lt;class T, unsigned int N, unsigned int M, unsigned int P&gt;
KMatrix&lt;T, N, P&gt; operator * (const KMatrix&lt;T, N, M&gt;&amp; A, const KMatrix&lt;T, M, P&gt;&amp; B)
{ ... };

template &lt;class T, unsigned int N, unsigned int M&gt;
KMatrix&lt;T, N, M&gt; operator * (const KMatrix&lt;T, N, M&gt;&amp; A, const T&amp; x)
{ ... };

template &lt;class T, unsigned int N, unsigned int M&gt;
KMatrix&lt;T, N, M&gt; operator * (const T&amp; x, const KMatrix&lt;T, N, M&gt;&amp; A)
{ ... };
</code></pre>
<p>Fragmente aus dem Code:</p>
<pre><code>KMatrix&lt;double, 2, 4&gt; E3;
KMatrix&lt;double, 4, 4&gt; E4;

E3 = E3 * E4;
</code></pre>
<p>Fehler:</p>
<pre><code>error C2782: 'class KMatrix&lt;T,N,M&gt; __cdecl operator *(const T &amp;,const class KMatrix&lt;T,N,M&gt; &amp;)' : Vorlagenparameter 'T' ist mehrdeutig
        koennte 'double' sein
        oder       'class KMatrix&lt;double,2,4&gt;'
</code></pre>
<p>das problem ist schon, dass er überhaupt nicht die richtige operatorüberladung wählt. vllt könnt ihr mir ja helfen, danke schon mal im voraus.</p>
<p>PS: ich hoffe die details reichen für den anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168753/templates-operatorüberladung-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 13:57:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168753.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Dec 2006 15:38:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Wed, 27 Dec 2006 15:38:40 GMT]]></title><description><![CDATA[<p>hi leutz,<br />
hab da ein kleines problem, ich hab mir eine Matrixklasse definiert und wollte mir da einige operatoren zu definieren, jedoch bekomme ich eine mehrdeutigkeitsfehlermeldung, die ich mir nicht ganz erklären kann.</p>
<p>verwenden tue ich: VC++ 6.0</p>
<p>Fragmente aus der Klassendefinition:</p>
<pre><code>template &lt;class T, unsigned int N, unsigned int M&gt;
class KMatrix
{ ... };

template &lt;class T, unsigned int N, unsigned int M, unsigned int P&gt;
KMatrix&lt;T, N, P&gt; operator * (const KMatrix&lt;T, N, M&gt;&amp; A, const KMatrix&lt;T, M, P&gt;&amp; B)
{ ... };

template &lt;class T, unsigned int N, unsigned int M&gt;
KMatrix&lt;T, N, M&gt; operator * (const KMatrix&lt;T, N, M&gt;&amp; A, const T&amp; x)
{ ... };

template &lt;class T, unsigned int N, unsigned int M&gt;
KMatrix&lt;T, N, M&gt; operator * (const T&amp; x, const KMatrix&lt;T, N, M&gt;&amp; A)
{ ... };
</code></pre>
<p>Fragmente aus dem Code:</p>
<pre><code>KMatrix&lt;double, 2, 4&gt; E3;
KMatrix&lt;double, 4, 4&gt; E4;

E3 = E3 * E4;
</code></pre>
<p>Fehler:</p>
<pre><code>error C2782: 'class KMatrix&lt;T,N,M&gt; __cdecl operator *(const T &amp;,const class KMatrix&lt;T,N,M&gt; &amp;)' : Vorlagenparameter 'T' ist mehrdeutig
        koennte 'double' sein
        oder       'class KMatrix&lt;double,2,4&gt;'
</code></pre>
<p>das problem ist schon, dass er überhaupt nicht die richtige operatorüberladung wählt. vllt könnt ihr mir ja helfen, danke schon mal im voraus.</p>
<p>PS: ich hoffe die details reichen für den anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198542</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 27 Dec 2006 15:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Wed, 27 Dec 2006 15:45:46 GMT]]></title><description><![CDATA[<p>EDIT: laut dem Post unter mir lag ich mal wieder falsch.</p>
<p>Also so wie ich das sehe liegt das Problem hier:</p>
<blockquote>
<p>KMatrix&lt;T, N, M&gt; operator * (const T&amp; x, const KMatrix&lt;T, N, M&gt;&amp; A)</p>
</blockquote>
<p>genauer gesagt weiss das Programm jetzt (meiner Meinung nach) nicht op das erste Argument genauso ist wie der erste Templateparameter von KMatrix&lt;T,N,M&gt; (also eben double) oder ob das jetzt für die Klasse steht.</p>
<p>Bin aber selbst noch ANfänger also keine Garantie.</p>
<p>ich denke eh dass du eher meintest:</p>
<pre><code class="language-cpp">KMatrix&lt;T, N, M&gt; operator * (const KMatrix&lt;T, N, M&gt;&amp; x, const KMatrix&lt;T, N, M&gt;&amp; A)
</code></pre>
<p>du musst ja je nach T anders verfahren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198544</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Wed, 27 Dec 2006 15:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Wed, 27 Dec 2006 15:44:19 GMT]]></title><description><![CDATA[<p>Nö, mein gcc kompiliert das ohne murren.<br />
Besorg dir doch VS2005, die 6.0er Version hat ein paar Macken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198545</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Wed, 27 Dec 2006 15:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Wed, 27 Dec 2006 16:18:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/631">@THX</a> 1138: an das VS2005 komm ich jetz aber nicht ran, daher brauch ich was anderes hilfreiches <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13317">@Shinja</a>: die einzelnen operatorüberladungen haben schon sinn, da das eine Skalar-Matrix -Multiplikationen sind und das andere eine Matrix-Matrix-Multiplikation ist.</p>
<p>meiner meinung nach müsste der compiler durch die deklaration von E3 und E4 erkennen was gemeint ist, und den Matrix-Matrix-operator aufrufen. er versucht aber halt das in den Skalar-Matrix-operator zu stecken, was natürlich nicht funktionieren kann. der compiler interpretiert den code also von vornherein schon falsch. der template-Parameter T ist eigentlich schon durch die Matrizen E3 bzw E4 auf double festgelegt, weswegen ich nicht verstehe, wo das problem für den compiler ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198575</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 27 Dec 2006 16:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Wed, 27 Dec 2006 16:38:28 GMT]]></title><description><![CDATA[<p>Der Code ist nicht das Problem, sondern dein Compiler. Grundsätzlich muss er nat. alle Überladungen prüfen, stellt dann aber fest, dass für die letzten beiden Überladungen, der Parameter T nicht eindeutig ist. Das ist im Prinzip kein Problem (SFINAE), da eine weitere Überladung existiert, für die alle Parameter ermittelt werden können. Möglicherweise kannst du dir mit ein paar Tricks behelfen, etwa indem du auf Überladung verzichtest, und statt dessen versuchst, das durch partielle Spezialisierung eines Klassentemplates zu erreichen. Ungefähr so:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
struct MatrixMul;

template&lt;class T, unsigned int N, unsigned int M, unsigned int P&gt;
struct MatrixMul&lt; KMatrix&lt;T, N, M&gt;, KMatrix&lt;T, M, P&gt; &gt;
{
    typedef KMatrix&lt;T, N, P&gt; result_type;
    result_type operator()(const KMatrix&lt;T, N, M&gt;&amp; A, const KMatrix&lt;T, M, P&gt;&amp; B) const;
};

template &lt;class T, unsigned int N, unsigned int M&gt;
struct MatrixMul&lt; KMatrix&lt; T, N, M&gt;, T &gt;
{
    typedef KMatrix&lt;T, N, M&gt; result_type;
    result_type operator()(const KMatrix&lt;T, N, M&gt;&amp; A, const T&amp; x) const;
};

template &lt;class T, unsigned int N, unsigned int M&gt;
struct MatrixMul&lt; T, KMatrix&lt; T, N, M&gt; &gt;
{
    typedef KMatrix&lt;T, N, M&gt; result_type;
    result_type operator()(const T&amp; x, const KMatrix&lt;T, N, M&gt;&amp; A) const;
};

template&lt;class T, class U&gt;
typename MatrixMul&lt; T, U &gt;::result_type operator*(const T&amp; lhs, const U&amp; rhs)
{
    return MatrixMul&lt; T, U &gt;()( lhs, rhs );
}
</code></pre>
<p>Vielleicht geht das ja mit vc6</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198587</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 27 Dec 2006 16:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Wed, 27 Dec 2006 16:59:08 GMT]]></title><description><![CDATA[<p>das sieht aber sehr unschön aus <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="😉"
    /><br />
ich bin grad dabei mir nen neuen compiler zu suchen, damit werde ich es dann nochmal probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198599</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 27 Dec 2006 16:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Thu, 28 Dec 2006 18:36:07 GMT]]></title><description><![CDATA[<p>so ich hab mir jetzt die Visual C++ Express Edition installiert sowie die Platform SDK, jetzt hab ich aber das problem das folgender Fehler kommt:</p>
<pre><code class="language-cpp">LINK : fatal error LNK1104: cannot open file 'odbc32.lib'
</code></pre>
<p>jemand einen vorschlag wie ich das beheben kann.<br />
danke schonmal im voraus</p>
<p>EDIT:</p>
<pre><code class="language-cpp">LINK : fatal error LNK1104: cannot open file 'user32.lib'
</code></pre>
<p>fehlt wohl auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199123</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Thu, 28 Dec 2006 18:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to templates + operatorüberladung = problem ;-) on Thu, 28 Dec 2006 18:43:14 GMT]]></title><description><![CDATA[<p>ok hat sich erledigt, habs selbst hinbekommen.<br />
hatte einen fehler bei den Pfadangaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199134</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Thu, 28 Dec 2006 18:43:14 GMT</pubDate></item></channel></rss>