<?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[falscher operator aufruf]]></title><description><![CDATA[<p>ersteinmal alle relevanten information zur klasse</p>
<pre><code class="language-cpp">template &lt;class t, unsigned int n&gt;
class T
{
  private:
    t data[n]; //datenfeld
  public:
    operator const t* () const; // cast in (t*)
    T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; r); // - operator
//...
};
//...
class T2: virtual public T&lt;float, 3&gt;
{
//...
};
//...
T2 var1, var2;
//...
T2 var3 = var1 - var2; //Anweisung mit falschem Operator aufruf
</code></pre>
<p>das problem was bei mir jetzt auftritt ist das er nicht den -operator aufruft sondern den cast-operator und ich hab keinen blassen warum. das interessante ist wenn ich den -operator aus der klasse auslagere, also</p>
<pre><code class="language-cpp">template &lt;class t, unsigned int n&gt;
T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; l, const T&lt;t,n&gt;&amp; r); // - operator ausgelagert
</code></pre>
<p>dann wird der -operator bei der anweisung aufgerufen.<br />
vllt hat ja jemand eine idee. danke schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180911/falscher-operator-aufruf</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 07:53:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180911.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 May 2007 07:50:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 12:53:57 GMT]]></title><description><![CDATA[<p>ersteinmal alle relevanten information zur klasse</p>
<pre><code class="language-cpp">template &lt;class t, unsigned int n&gt;
class T
{
  private:
    t data[n]; //datenfeld
  public:
    operator const t* () const; // cast in (t*)
    T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; r); // - operator
//...
};
//...
class T2: virtual public T&lt;float, 3&gt;
{
//...
};
//...
T2 var1, var2;
//...
T2 var3 = var1 - var2; //Anweisung mit falschem Operator aufruf
</code></pre>
<p>das problem was bei mir jetzt auftritt ist das er nicht den -operator aufruft sondern den cast-operator und ich hab keinen blassen warum. das interessante ist wenn ich den -operator aus der klasse auslagere, also</p>
<pre><code class="language-cpp">template &lt;class t, unsigned int n&gt;
T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; l, const T&lt;t,n&gt;&amp; r); // - operator ausgelagert
</code></pre>
<p>dann wird der -operator bei der anweisung aufgerufen.<br />
vllt hat ja jemand eine idee. danke schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280686</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 09 May 2007 12:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 10:11:36 GMT]]></title><description><![CDATA[<p>Darf man vielleicht erfahren, was es an Konstruktoren in Deiner TC gibt?</p>
<p>Ich vermute mal da gibts sowas wie</p>
<pre><code class="language-cpp">T(const t* pt);
</code></pre>
<p>Wenn ja, mach den mal explicit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280751</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 10:11:36 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 10:58:20 GMT]]></title><description><![CDATA[<p>naja, implizit gibts diesen vllt schon, da ich einen copy-constructor definiert habe.</p>
<pre><code class="language-cpp">T(const T&lt;t,n&gt;&amp; src);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1280788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280788</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 08 May 2007 10:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 11:08:22 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wie der Name schon andeutet, hilft Dir ein impliziter Konstruktor nicht weiter, wenn Du ein &quot;explicit&quot; (keyword) brauchst <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280795</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 08 May 2007 11:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 12:03:47 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>naja, implizit gibts diesen vllt schon, da ich einen copy-constructor definiert habe.</p>
<pre><code class="language-cpp">T(const T&lt;t,n&gt;&amp; src);
</code></pre>
</blockquote>
<p>Der Konstruktor passt eigentlich nicht.</p>
<p>Ich hatte schon an sowas wie</p>
<pre><code class="language-cpp">T(const t* pt)
</code></pre>
<p>gedacht.</p>
<p>Das gibt dann mit dem Cast-Operator nämlich</p>
<pre><code class="language-cpp">T2 var3(float* + float*);
/*
float* implizit durch Cast-Operator fuer var1 und var2 erzeugt, und in passenden Konstruktor
T2(float* pt) eingesetzt.
*/
</code></pre>
<p>Ich habe die Casts hier mal extra explizit ausgeführt. In Deinem würde das natürlich alles implizit passieren.<br />
Der resultierende Zeiger zeigt zwar vermutlich ins Nirvana, aber trotzdem ist das (sofern ich es nicht verpeilt habe) ein gültiger Ausruck.<br />
Mach entweder den Cast oder den Konvertierungskonstruktor (sofern er wirklich existiert) mal explicit.<br />
Der Cast-Operator sollte eigentlich auch zwei mal aufgerufen werden. Ist das so?</p>
<p>PS: Ich habe keinen Schnall, ob das wirklich so abläuft. Das ist nur eine vage Vermutung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280816</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 12:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 13:25:03 GMT]]></title><description><![CDATA[<p>Poste doch mal alle Konstruktoren und Konvertierungsoperatoren von T und T2 sowie die Deklaration aller freien Operatoren, die für T oder T2 gefunden werden können.<br />
Zeiger kann man im Übrigen nicht addieren oder subtrahieren, wohl aber Zeiger und integrale Ausdrücke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280900</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 May 2007 13:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 15:32:06 GMT]]></title><description><![CDATA[<p>Ja, da hast Du allerdings recht <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>.</p>
<p>Das gesamte Interface der Klasse wäre allerdings schon hilfreich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280994</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 15:32:06 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 15:36:17 GMT]]></title><description><![CDATA[<p>Das war Mist, bitte löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280999</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 15:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 16:22:55 GMT]]></title><description><![CDATA[<p>das was ich da geschrieben habe ist eine vereinfachte und reduzierte variante der tatsächlichen klassen (über 100 zeilen). deswegen sind auch die namen nur als T bzw T2 gegeben um es auf das wesentliche zu reduzieren.</p>
<p>für T gibts folgende Konstruktoren und interne Operatoren:</p>
<pre><code class="language-cpp">T();
T(const T&lt;t, n&gt;&amp; src);
void operator = (const T&lt;t, n&gt;&amp; src);
operator const t* () const;
T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; r);
</code></pre>
<p>für T2 gibts folgende Konstruktoren und interne Operatoren:</p>
<pre><code class="language-cpp">T2(float x = 0, float y = 0, float z = 0);
T2(const T&lt;float, 3&gt;&amp; src);
void operator = (const T&lt;float, 3&gt;&amp; src);
</code></pre>
<p>und T2 ist wie gesagt von T abgeleitet also:</p>
<pre><code class="language-cpp">class T2 : virtual public T
{//...
};
</code></pre>
<p>und ja er ruft bei der Anweisung zweimal den Cast-Operator auf und scheint die dann voneinander abzuziehen, warum auch immer das geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281037</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 08 May 2007 16:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 17:22:47 GMT]]></title><description><![CDATA[<p>jetzt war ich selbst ein wenig verwirrt. Subtrahieren kann man zwei Zeiger schon: p1-p2== distance(p2,p1) ... naja, Konvertierungsoperatoren sind sowieso ziemlich böse, wenn man nicht sehr aufpasst.</p>
<p>Ich behaupte allerdings, das hier noch eine weiter Deklaration stört. Jedenfalls ruft mein Compiler hier nicht den Konvertierungsoperator auf.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

template &lt;class t, unsigned int n&gt;
class T
{
private:
    t* data[n];
public:
    T() { cout &lt;&lt; &quot;T::T()&quot; &lt;&lt; endl; }
    T(const T&lt;t, n&gt;&amp; src) { cout &lt;&lt; &quot;T::T(const T&amp;)&quot; &lt;&lt; endl; }
    void operator = (const T&lt;t, n&gt;&amp; src) { cout &lt;&lt; &quot;void T::operator=(const T&amp;)&quot; &lt;&lt; endl; }
    operator const t* () const { cout &lt;&lt; &quot;T::operator const t*()&quot; &lt;&lt; endl; return data; }
    T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; r) { cout &lt;&lt; &quot;T T::operator-(const T&amp;)&quot; &lt;&lt; endl; return *this; }
};
class T2: virtual public T&lt;float, 3&gt;
{
public:
    T2(float x = 0, float y = 0, float z = 0) { cout &lt;&lt; &quot;T2::T2(float=0,float=0,float=0)&quot; &lt;&lt; endl; }
    T2(const T&lt;float, 3&gt;&amp; src) { cout &lt;&lt; &quot;T2::T2(const T&lt;float,3&gt;&amp;)&quot; &lt;&lt; endl; }
    void operator = (const T&lt;float, 3&gt;&amp; src) { cout &lt;&lt; &quot;coid T2::operator=(const T&lt;float,3&gt;&amp;)&quot; &lt;&lt; endl; }
};

int main()
{
    T2 var1, var2;

    T2 var3 = var1 - var2;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1281067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281067</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 May 2007 17:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 17:25:52 GMT]]></title><description><![CDATA[<p>Was mich da wundert, ist, daß es keinen passenden Konstruktor gibt. Ein entsprechender Konstruktor müsste auch einen Pointer übernehmen und keine Objektreferenz.<br />
Probier als Workarround doch mal, den Cast selbst als explicit zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281069</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 17:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 18:08:04 GMT]]></title><description><![CDATA[<p>Der folgende Konstruktor wird benutzt:</p>
<pre><code class="language-cpp">T2(float x = 0, float y = 0, float z = 0);
</code></pre>
<p>Die Differenz der beiden Zeiger liefert ein Int, und der passt zu dem oben stehenden Konstruktor. Irgendwie ziemlich böse.<br />
Wieso dabei aber das ganze implzite Geknispel dem direkt passenden Wert vom Subtraktions-Operator vorgezogen wird, ist mir schleierhaft.<br />
Setzte in dem obenstehenden Konstruktor mal eine Ausgabe ein. Ich schätze mal der wird aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281095</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 18:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 18:53:51 GMT]]></title><description><![CDATA[<p>ja das meinte ich ja, mein fehler, der konvertiert erst var1 und var2 in t* und ruft dann den constructor mit x,y,z auf.<br />
wie definiere ich denn das zeugs explizit? und was genau bewirkt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281159</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 08 May 2007 18:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 18:58:16 GMT]]></title><description><![CDATA[<p>explicit als Schlüsselwort mit rein (Google hilft <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 />
Mir ist nur Schleierhaft, wieso das Casten und implizite Umwandeln von int nach float dem direkt passenden operator- und dem Copy-Konstruktor vorgezogen wird. Bei mir ist das nicht so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281161</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 May 2007 18:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 19:15:18 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>explicit als Schlüsselwort mit rein (Google hilft <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 />
Mir ist nur Schleierhaft, wieso das Casten und implizite Umwandeln von int nach float dem direkt passenden operator- und dem Copy-Konstruktor vorgezogen wird. Bei mir ist das nicht so.</p>
</blockquote>
<p>es ist aucht nicht so. Wenn das ein vereinfachtes Beispiel ist, gehe ich davon aus, dass sich beim Vereinfachen ein Fehler eingeschlichen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281168</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 May 2007 19:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 21:00:41 GMT]]></title><description><![CDATA[<p>beim vereinfachen ist kein fehler passiert, habe es gerade nochmal durchgeschaut.<br />
also ich hab mir jetz mal das mit explicit angeschaut, allerdings hab ich jetz ein anderes problem. nämlich:</p>
<pre><code class="language-cpp">T2 var3 = var2 - var1;
</code></pre>
<p>das funktioniert jetzt nicht mehr, warum auch nicht?<br />
weil es gibt ja den copy-constructor über die klasse T, der das eigentlich abwickeln sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281209</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 08 May 2007 21:00:41 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Tue, 08 May 2007 21:42:06 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>beim vereinfachen ist kein fehler passiert, habe es gerade nochmal durchgeschaut.</p>
</blockquote>
<p>Dann sollte es sich aber nicht anders verhalten. Welchen Compiler setzt du denn ein?</p>
<blockquote>
<p>also ich hab mir jetz mal das mit explicit angeschaut, allerdings hab ich jetz ein anderes problem. nämlich:</p>
<pre><code class="language-cpp">T2 var3 = var2 - var1;
</code></pre>
<p>das funktioniert jetzt nicht mehr, warum auch nicht?<br />
weil es gibt ja den copy-constructor über die klasse T, der das eigentlich abwickeln sollte.</p>
</blockquote>
<p>Was heißt funktioniert nicht? Fehlermeldung des Compilers? wenn ja, welche? Im Übrigen sind hier zwei Konstruktoren von T2 beteiligt und die von T eigentlich nur als Teil dieser anderen Konstruktoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281242</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 May 2007 21:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 06:28:25 GMT]]></title><description><![CDATA[<p>als compiler hab ich den VC++ Express 2005.</p>
<pre><code>error C2440: 'initializing' : cannot convert from '__w64 int' to 'T2' Constructor for class 'T2' is declared 'explicit'
</code></pre>
<p>weil ich jetzt den einen constructor explizit gemacht habe</p>
<pre><code class="language-cpp">explicit T(float x = 0, float y = 0, float z = 0, float v = 0);
</code></pre>
<p>also er konvertiert var1 und var2 immernoch in (t*)</p>
<p>also gedacht war das ja so, das ich die operatoren in T definiere und in T2 mitverwenden kann, weswegen bei var1 - var2 eigentlich was temporäres von Typ T&lt;float, 3&gt; rauskommen sollte und das sollte dann als argument für den anderen constructor bei der Klasse T2 genommen werden.</p>
<p>das problem ist außerdem noch, das wenn ich statt</p>
<pre><code class="language-cpp">T2 var3 = var1 - var2;
</code></pre>
<p>jetzt</p>
<pre><code class="language-cpp">T2 var3(var1 - var2);
</code></pre>
<p>schreibe dann nimmt er auch den expliziten constructor von T2 und subtrahiert wieder die zeiger voneinander. <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/1281301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281301</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 09 May 2007 06:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 06:39:23 GMT]]></title><description><![CDATA[<p>Was sagt denn der Compiler, wenn du den operator t* weglässt? (btw, wozu benötigst du den überhaupt?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281308</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 09 May 2007 06:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 07:19:35 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>beim vereinfachen ist kein fehler passiert, habe es gerade nochmal durchgeschaut.<br />
also ich hab mir jetz mal das mit explicit angeschaut, allerdings hab ich jetz ein anderes problem. nämlich:</p>
<pre><code class="language-cpp">T2 var3 = var2 - var1;
</code></pre>
<p>das funktioniert jetzt nicht mehr, warum auch nicht?<br />
weil es gibt ja den copy-constructor über die klasse T, der das eigentlich abwickeln sollte.</p>
</blockquote>
<p>Ich wage mal zu behaupten, daß dann Dein Copy-Konstruktor nicht in Ordnung ist, bzw. nicht existiert. Oder aber Dein operator- gibt einen falschen Typ zurück.</p>
<pre><code class="language-cpp">//falscher Parameter oder nicht vorhanden
T2(const T&lt;float, 3&gt;&amp; src);
//bzw.
//gibt falschen Typ zurück.
T&lt;t,n&gt; operator - (const T&lt;t,n&gt;&amp; r);
</code></pre>
<p>Offensichtlich scheint die Adressdifferenz, die durch das Subtrahieren der Zeiger entsteht, die einzige Variante zu sein, für die ein gültiger Konstruktor existiert (der jetzt aber explicit deklariert wurde).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281329</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 09 May 2007 07:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 12:53:07 GMT]]></title><description><![CDATA[<p>also var1 - var2 sollte ein ergebnis vom typ T&lt;float, 3&gt; liefern, da der Subtraktions-Operator von T aufgerufen werden sollte und für T2 gibt es ja den Konstruktor</p>
<pre><code class="language-cpp">T2(const T&lt;float, 3&gt;&amp; src);
</code></pre>
<p>den Cast in (t*) brauch ich in dem programm, weil es bei mir funktionen gibt die diesen typ als argumenttyp haben, aber das ist ja für das problem irrelevant. der cast liefert quasi den zeiger der internen variable</p>
<pre><code class="language-cpp">t data[n];
</code></pre>
<p>das sind aber wie gesagt alles nur details.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281590</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 09 May 2007 12:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 12:56:47 GMT]]></title><description><![CDATA[<p>Aber genau dieser Cast scheint das Problem zu sein, weil jetzt außer deinem op- auch der eingebaute op- für Zeiger in Frage kommt für diesen Ausdruck <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="😉"
    /> Wie gesagt, lass mal <em>testweise</em> diesen Operator weg.</p>
<p>(wenn du an anderer Stelle unbedingt einen t* benötigst, ist vielleicht eine explizite Umwandlungsfunktion 't* data()' geeigneter als ein Umwandlungsoperator)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281595</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 09 May 2007 12:56:47 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 13:06:32 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Aber genau dieser Cast scheint das Problem zu sein, weil jetzt außer deinem op- auch der eingebaute op- für Zeiger in Frage kommt für diesen Ausdruck <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="😉"
    /> Wie gesagt, lass mal <em>testweise</em> diesen Operator weg.</p>
</blockquote>
<p>Aber der Cast DARF kein Problem sein, denn es ist standardisierte Regel, daß den passenden Typen priorität vor den implizit umzuwandelnden Typen eingeräumt wird. Selbst der eklige und antike MSVC 6.0 hier in der Firma macht das korrekt.<br />
Ich schätze mal, daß nach wie vor entweder im Rückgabewert von operator- oder im Copy-Konstroktor ein Bock ist, und der Typ eben nicht passt ( vielleicht das kleine t vom Template-Type mit dem großen T der Klasse vertauscht o.ä.). Die Tatsache, daß es plötzlich gar keinen passenden Konstruktor mehr gibt, wenn man den Konvertierungskonstruktor mit den drei Float-Argumenten als explicit deklariert, ist ein weiteres Indiz dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281608</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 09 May 2007 13:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 13:03:11 GMT]]></title><description><![CDATA[<p>das problem ist ich kann den cast-operator nicht einfach weglassen, weil ich dann tausend anderen stellen fehlermeldungen bekomme, die eben genau diesen verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281610</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 09 May 2007 13:03:11 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 13:10:13 GMT]]></title><description><![CDATA[<p>also T2 hat jetzt folgende Konstruktoren</p>
<pre><code class="language-cpp">explicit T2(float x = 0, float y = 0, float z = 0);
T2(const T&lt;float, 3&gt;&amp; src);
T2(const T2&amp; src);
</code></pre>
<p>dennoch findet er bei der anweisung</p>
<pre><code class="language-cpp">T2 var1, var2;
//...
T2 var3 = var1 - var2;
</code></pre>
<p>keinen passenden Konstruktor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281620</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 09 May 2007 13:10:13 GMT</pubDate></item><item><title><![CDATA[Reply to falscher operator aufruf on Wed, 09 May 2007 14:11:45 GMT]]></title><description><![CDATA[<p>Ehrlich gesagt gehen mir da die Erklärungen aus. Ich habe es mit der von Dir geposteten Templatisierung und Vererbung auf verschiedenen Compilern getestet, und bei mir wird immer der Operator und der Copy-Konstruktor aufgerufen. Bei camper scheint es auch zu laufen.<br />
Das von Dir beschriebene Verhalten erreiche ich nur, wenn ich den Copy-Konstruktor auskommentiere oder einen anderen Rückgabewert für operator- angebe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281676</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 09 May 2007 14:11:45 GMT</pubDate></item></channel></rss>