<?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[operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden]]]></title><description><![CDATA[<p>hallo leute</p>
<p>hab da ein problem mit einem operator+ und finde den fehler nicht.<br />
vielleicht kann mir jemand sagen was ich da falsch gemacht habe.</p>
<pre><code>auto WINAPI WinMain(HINSTANCE, HINSTANCE, char*, int) -&gt; int
{
   txl::rect r1(120,150,430, 550);
   txl::rect r2(120,150,430, 550);

   width(r1) += 20;
   width(r2) = width(r1) + 50; // hier wird der fehler angezeigt
   size(r1) = txl::rect(100,100);
   position(r2) = txl::point(0,0);
   position(r1, txl::rect::vertices::center) = txl::point(0,0);
   inflate(r1).margins(0,0,0,100);
   deflate(r2).margins(10,10);
   txl::point pp = vertex(r1).left_center();

   return 0;
};
</code></pre>
<p>hier die fehlermeldung:</p>
<pre><code>1&gt;...error C2666: &quot;txl::operator +&quot;: 2 Überladungen haben ähnliche Konvertierungen
1&gt;...note: kann &quot;txl::point txl::operator +(txl::point &amp;,const txl::distance &amp;) noexcept&quot; sein [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: oder &quot;txl::rect txl::operator +(txl::rect &amp;,const txl::distance &amp;) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: oder &quot;long txl::temporary_object::operator +(const txl::temporary_object::rect_width &amp;,const long) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: oder &quot;long txl::temporary_object::operator +(const txl::temporary_object::rect_height &amp;,const long) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: bei Anpassung der Argumentliste &quot;(txl::temporary_object::rect_width, int)&quot;
</code></pre>
<p>der relevante source:</p>
<pre><code>namespace txl
{

class point
{
   public:
      long x;
      long y;

      point(void) noexcept;
      point(long xy) noexcept;
      point(long tx, long ty) noexcept;
      point(const point &amp;p) noexcept;
      point(point &amp;&amp;p) noexcept;
      ~point(void) noexcept;

      auto operator=(const point &amp;p) noexcept -&gt; point&amp;;
      auto operator=(point &amp;&amp;p) noexcept -&gt; point&amp;;

      auto operator==(const point &amp;p) const noexcept -&gt; bool;
      auto operator!=(const point &amp;p) const noexcept -&gt; bool;
}; /* class point */

class rect
{
   public:
      long left;
      long top;
      long right;
      long bottom;

      enum struct vertices 
      {
         left_top             = 0x01 | 0x10,
         left_center          = 0x01 | 0x20,
         left_bottom          = 0x01 | 0x40,
         center_top           = 0x02 | 0x10,
         center_center        = 0x02 | 0x20,
         center               = center_center,
         center_bottom        = 0x02 | 0x40,
         right_top            = 0x04 | 0x10,
         right_center         = 0x04 | 0x20,
         right_bottom         = 0x04 | 0x40
      };

      rect(void) noexcept;
      rect(long value) noexcept;
      rect(long w, long h) noexcept;
      rect(const point &amp;p, long w, long h) noexcept;
      rect(const point &amp;lt, const point &amp;rb) noexcept;
      rect(long l, long t, long r, long b) noexcept;
      rect(const rect &amp;r) noexcept;
      rect(rect &amp;&amp;r) noexcept;
      ~rect(void) noexcept;

      auto operator=(const rect &amp;r) noexcept -&gt; rect&amp;;
      auto operator=(rect &amp;&amp;r) noexcept -&gt; rect&amp;;

      auto operator==(const rect &amp;r) const noexcept -&gt; bool;
      auto operator!=(const rect &amp;r) const noexcept -&gt; bool;
}; /* class rect */

class distance
{
   public:
      long x;
      long y;

      distance(void) noexcept;
      distance(long xy) noexcept;
      distance(long tx, long ty) noexcept;
      distance(const distance &amp;d) noexcept;
      distance(distance &amp;&amp;d) noexcept;
      ~distance(void) noexcept;

      auto operator=(const distance &amp;d) noexcept -&gt; distance&amp;;
      auto operator=(distance &amp;&amp;d) noexcept -&gt; distance&amp;;

      auto operator==(const distance &amp;d) const noexcept -&gt; bool;
      auto operator!=(const distance &amp;d) const noexcept -&gt; bool;
}; /* class distance */

auto operator+(point &amp;p, const distance &amp;d) noexcept -&gt; point;
auto operator+=(point &amp;p, const distance &amp;d) noexcept -&gt; point&amp;;
auto operator-(point &amp;p, const distance &amp;d) noexcept -&gt; point;
auto operator-=(point &amp;p, const distance &amp;d) noexcept -&gt; point&amp;;

auto operator+(rect &amp;r, const distance &amp;d) noexcept -&gt; rect;
auto operator+=(rect &amp;r, const distance &amp;d) noexcept -&gt; rect&amp;;
auto operator-(rect &amp;r, const distance &amp;d) noexcept -&gt; rect;
auto operator-=(rect &amp;r, const distance &amp;d) noexcept -&gt; rect&amp;;

class rect_reference
{
   public:
      txl::rect &amp;rect;

      rect_reference(txl::rect &amp;r) noexcept : rect(r)
      {
      }

      rect_reference(const rect_reference &amp;r) noexcept : rect(r.rect)
      {
      }

      rect_reference(rect_reference&amp;&amp;) noexcept = delete;

      ~rect_reference(void) noexcept
      {
      }

      auto operator=(const rect_reference&amp;) noexcept -&gt; rect_reference&amp; = delete;
      auto operator=(rect_reference&amp;&amp;) noexcept -&gt; rect_reference&amp; = delete;
}; /* class rect_reference */

namespace temporary_object
{

class rect_width : public txl::rect_reference
{
   public:
      using rect_reference::rect_reference;

      auto operator=(const rect_width &amp;r) noexcept -&gt; rect_width&amp;
      {
         rect.right = rect.left + (r.rect.right - r.rect.left);
         return *this;
      }

      auto operator=(const long w) noexcept -&gt; rect_width&amp;
      {
         rect.right = rect.left + w;
         return *this;
      }

      operator long(void) const noexcept 
      {
         return rect.right - rect.left;
      }
}; /* class rect_width */

inline auto operator+(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) + value;
}

inline auto operator-(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) - value;
}

inline auto operator*(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) * value;
}

inline auto operator/(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) / value;
}

inline auto operator+=(const rect_width &amp;r, const long value) noexcept -&gt; const rect_width&amp;
{
   r.rect.right += value;
   return r;
}

inline auto operator-=(const rect_width &amp;r, const long value) noexcept -&gt; const rect_width&amp;
{
   r.rect.right -= value;
   return r;
}

} /* namespace temporary_object */

inline auto width(txl::rect &amp;r) noexcept -&gt; temporary_object::rect_width
{
   return temporary_object::rect_width(r);
}

} /* namespace txl */
</code></pre>
<p>das problem ist</p>
<pre><code>width(r1) + 50;
</code></pre>
<p>die funktion <code>width</code> ist hier in zeile 189 deklariert.<br />
es wird nur ein <code>temporary_object::rect_width</code> erstellt.<br />
die klasse <code>rect_width</code> faengt in zeile 131 an.<br />
der <code>operator+(const rect_width &amp;r, const long value)</code> faengt in zeile 154 an. der gibt einen <code>long</code> zurueck. mehr wird da eigendlich nicht gemacht.</p>
<p>woher kommt da dann die fehlermeldung?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335794/operator-problem-bei-der-verwendung-der-argumentbezogenen-suche-gefunden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 07:15:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335794.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 Dec 2015 02:04:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 02:04:49 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>hab da ein problem mit einem operator+ und finde den fehler nicht.<br />
vielleicht kann mir jemand sagen was ich da falsch gemacht habe.</p>
<pre><code>auto WINAPI WinMain(HINSTANCE, HINSTANCE, char*, int) -&gt; int
{
   txl::rect r1(120,150,430, 550);
   txl::rect r2(120,150,430, 550);

   width(r1) += 20;
   width(r2) = width(r1) + 50; // hier wird der fehler angezeigt
   size(r1) = txl::rect(100,100);
   position(r2) = txl::point(0,0);
   position(r1, txl::rect::vertices::center) = txl::point(0,0);
   inflate(r1).margins(0,0,0,100);
   deflate(r2).margins(10,10);
   txl::point pp = vertex(r1).left_center();

   return 0;
};
</code></pre>
<p>hier die fehlermeldung:</p>
<pre><code>1&gt;...error C2666: &quot;txl::operator +&quot;: 2 Überladungen haben ähnliche Konvertierungen
1&gt;...note: kann &quot;txl::point txl::operator +(txl::point &amp;,const txl::distance &amp;) noexcept&quot; sein [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: oder &quot;txl::rect txl::operator +(txl::rect &amp;,const txl::distance &amp;) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: oder &quot;long txl::temporary_object::operator +(const txl::temporary_object::rect_width &amp;,const long) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: oder &quot;long txl::temporary_object::operator +(const txl::temporary_object::rect_height &amp;,const long) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
1&gt;...note: bei Anpassung der Argumentliste &quot;(txl::temporary_object::rect_width, int)&quot;
</code></pre>
<p>der relevante source:</p>
<pre><code>namespace txl
{

class point
{
   public:
      long x;
      long y;

      point(void) noexcept;
      point(long xy) noexcept;
      point(long tx, long ty) noexcept;
      point(const point &amp;p) noexcept;
      point(point &amp;&amp;p) noexcept;
      ~point(void) noexcept;

      auto operator=(const point &amp;p) noexcept -&gt; point&amp;;
      auto operator=(point &amp;&amp;p) noexcept -&gt; point&amp;;

      auto operator==(const point &amp;p) const noexcept -&gt; bool;
      auto operator!=(const point &amp;p) const noexcept -&gt; bool;
}; /* class point */

class rect
{
   public:
      long left;
      long top;
      long right;
      long bottom;

      enum struct vertices 
      {
         left_top             = 0x01 | 0x10,
         left_center          = 0x01 | 0x20,
         left_bottom          = 0x01 | 0x40,
         center_top           = 0x02 | 0x10,
         center_center        = 0x02 | 0x20,
         center               = center_center,
         center_bottom        = 0x02 | 0x40,
         right_top            = 0x04 | 0x10,
         right_center         = 0x04 | 0x20,
         right_bottom         = 0x04 | 0x40
      };

      rect(void) noexcept;
      rect(long value) noexcept;
      rect(long w, long h) noexcept;
      rect(const point &amp;p, long w, long h) noexcept;
      rect(const point &amp;lt, const point &amp;rb) noexcept;
      rect(long l, long t, long r, long b) noexcept;
      rect(const rect &amp;r) noexcept;
      rect(rect &amp;&amp;r) noexcept;
      ~rect(void) noexcept;

      auto operator=(const rect &amp;r) noexcept -&gt; rect&amp;;
      auto operator=(rect &amp;&amp;r) noexcept -&gt; rect&amp;;

      auto operator==(const rect &amp;r) const noexcept -&gt; bool;
      auto operator!=(const rect &amp;r) const noexcept -&gt; bool;
}; /* class rect */

class distance
{
   public:
      long x;
      long y;

      distance(void) noexcept;
      distance(long xy) noexcept;
      distance(long tx, long ty) noexcept;
      distance(const distance &amp;d) noexcept;
      distance(distance &amp;&amp;d) noexcept;
      ~distance(void) noexcept;

      auto operator=(const distance &amp;d) noexcept -&gt; distance&amp;;
      auto operator=(distance &amp;&amp;d) noexcept -&gt; distance&amp;;

      auto operator==(const distance &amp;d) const noexcept -&gt; bool;
      auto operator!=(const distance &amp;d) const noexcept -&gt; bool;
}; /* class distance */

auto operator+(point &amp;p, const distance &amp;d) noexcept -&gt; point;
auto operator+=(point &amp;p, const distance &amp;d) noexcept -&gt; point&amp;;
auto operator-(point &amp;p, const distance &amp;d) noexcept -&gt; point;
auto operator-=(point &amp;p, const distance &amp;d) noexcept -&gt; point&amp;;

auto operator+(rect &amp;r, const distance &amp;d) noexcept -&gt; rect;
auto operator+=(rect &amp;r, const distance &amp;d) noexcept -&gt; rect&amp;;
auto operator-(rect &amp;r, const distance &amp;d) noexcept -&gt; rect;
auto operator-=(rect &amp;r, const distance &amp;d) noexcept -&gt; rect&amp;;

class rect_reference
{
   public:
      txl::rect &amp;rect;

      rect_reference(txl::rect &amp;r) noexcept : rect(r)
      {
      }

      rect_reference(const rect_reference &amp;r) noexcept : rect(r.rect)
      {
      }

      rect_reference(rect_reference&amp;&amp;) noexcept = delete;

      ~rect_reference(void) noexcept
      {
      }

      auto operator=(const rect_reference&amp;) noexcept -&gt; rect_reference&amp; = delete;
      auto operator=(rect_reference&amp;&amp;) noexcept -&gt; rect_reference&amp; = delete;
}; /* class rect_reference */

namespace temporary_object
{

class rect_width : public txl::rect_reference
{
   public:
      using rect_reference::rect_reference;

      auto operator=(const rect_width &amp;r) noexcept -&gt; rect_width&amp;
      {
         rect.right = rect.left + (r.rect.right - r.rect.left);
         return *this;
      }

      auto operator=(const long w) noexcept -&gt; rect_width&amp;
      {
         rect.right = rect.left + w;
         return *this;
      }

      operator long(void) const noexcept 
      {
         return rect.right - rect.left;
      }
}; /* class rect_width */

inline auto operator+(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) + value;
}

inline auto operator-(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) - value;
}

inline auto operator*(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) * value;
}

inline auto operator/(const rect_width &amp;r, const long value) noexcept -&gt; long
{
   return (r.rect.right - r.rect.left) / value;
}

inline auto operator+=(const rect_width &amp;r, const long value) noexcept -&gt; const rect_width&amp;
{
   r.rect.right += value;
   return r;
}

inline auto operator-=(const rect_width &amp;r, const long value) noexcept -&gt; const rect_width&amp;
{
   r.rect.right -= value;
   return r;
}

} /* namespace temporary_object */

inline auto width(txl::rect &amp;r) noexcept -&gt; temporary_object::rect_width
{
   return temporary_object::rect_width(r);
}

} /* namespace txl */
</code></pre>
<p>das problem ist</p>
<pre><code>width(r1) + 50;
</code></pre>
<p>die funktion <code>width</code> ist hier in zeile 189 deklariert.<br />
es wird nur ein <code>temporary_object::rect_width</code> erstellt.<br />
die klasse <code>rect_width</code> faengt in zeile 131 an.<br />
der <code>operator+(const rect_width &amp;r, const long value)</code> faengt in zeile 154 an. der gibt einen <code>long</code> zurueck. mehr wird da eigendlich nicht gemacht.</p>
<p>woher kommt da dann die fehlermeldung?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479176</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 02:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 05:20:31 GMT]]></title><description><![CDATA[<p>Versuch mal <code>50L</code> statt <code>50</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479180</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 05:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 08:59:44 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Versuch mal <code>50L</code> statt <code>50</code> .</p>
</blockquote>
<p>Alles klar, wilhelm tell. das war ein meisterschuss. aber irgendwie bin ich jetzt nicht gescheiter als vorher <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="🙂"
    /><br />
wie kommts dazu ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479183</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 08:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 09:35:19 GMT]]></title><description><![CDATA[<p>Dein Operator+ ist vielfach überladen. Keine einzige Überladung passt 100%, beispielsweise passt die von dir gewünschte Überladung nicht, weil 50 ein int ist, kein long. Also werden Konvertierungen der Argumente in Betracht gezogen. Doch bei deinen Klassen lässt sich so ziemlich alles in alles umwandeln und auch alles aus int konstruieren. Daher kommen lauter verschiedene Überladungen gleich gut in Frage. Die Fehlermeldung gibt dir eine Liste der Möglichkeiten, die gefunden wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479185</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 09:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 16:49:39 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Dein Operator+ ist vielfach überladen. Keine einzige Überladung passt 100%, beispielsweise passt die von dir gewünschte Überladung nicht, weil 50 ein int ist, kein long. Also werden Konvertierungen der Argumente in Betracht gezogen. Doch bei deinen Klassen lässt sich so ziemlich alles in alles umwandeln und auch alles aus int konstruieren. Daher kommen lauter verschiedene Überladungen gleich gut in Frage. Die Fehlermeldung gibt dir eine Liste der Möglichkeiten, die gefunden wurden.</p>
</blockquote>
<p>Wobei zu erwähnen wäre, dass der gezeigte Code offensichtlich gekürzt wurde, und den beschriebenen Fehler nicht zeigt. Also gut geraten <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2479207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479207</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 12 Dec 2015 16:49:39 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 20:25:21 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Dein Operator+ ist vielfach überladen. Keine einzige Überladung passt 100%, beispielsweise passt die von dir gewünschte Überladung nicht, weil 50 ein int ist, kein long. Also werden Konvertierungen der Argumente in Betracht gezogen. Doch bei deinen Klassen lässt sich so ziemlich alles in alles umwandeln und auch alles aus int konstruieren. Daher kommen lauter verschiedene Überladungen gleich gut in Frage. Die Fehlermeldung gibt dir eine Liste der Möglichkeiten, die gefunden wurden.</p>
</blockquote>
<p>Wobei zu erwähnen wäre, dass der gezeigte Code offensichtlich gekürzt wurde, und den beschriebenen Fehler nicht zeigt. Also gut geraten <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>
</blockquote>
<p>Ja, das hat mich auch ein bisschen verwundert. Aber die Fehlermeldung ist sehr eindeutig und der Rest des Codes lässt vermuten, dass da noch viel mehr Umwandlungsoperatoren und/oder Überladungen vorhanden sind. Was natürlich die Frage aufwirft, warum alles in alles konvertierbar ist. Der Grund für solch ein Design ist doch gerade, damit man solche versehentlichen Konvertierungen (die ja Fehler sind, wenn man beispielsweise eine Höhe wie eine Breite behandelt) vom Compiler finden lassen kann. Wenn alles in (fast) alles andere konvertierbar ist, kann man auch gleich long für alles nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479246</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 20:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 20:25:23 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Dein Operator+ ist vielfach überladen. Keine einzige Überladung passt 100%, beispielsweise passt die von dir gewünschte Überladung nicht, weil 50 ein int ist, kein long. Also werden Konvertierungen der Argumente in Betracht gezogen. Doch bei deinen Klassen lässt sich so ziemlich alles in alles umwandeln und auch alles aus int konstruieren. Daher kommen lauter verschiedene Überladungen gleich gut in Frage. Die Fehlermeldung gibt dir eine Liste der Möglichkeiten, die gefunden wurden.</p>
</blockquote>
<p>Wobei zu erwähnen wäre, dass der gezeigte Code offensichtlich gekürzt wurde, und den beschriebenen Fehler nicht zeigt. Also gut geraten <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>
</blockquote>
<p>doch doch. der gezeigte code sollte alles behinhalten was den fehler angeht.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479247</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 20:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 20:38:49 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Dein Operator+ ist vielfach überladen. Keine einzige Überladung passt 100%, beispielsweise passt die von dir gewünschte Überladung nicht, weil 50 ein int ist, kein long. Also werden Konvertierungen der Argumente in Betracht gezogen. Doch bei deinen Klassen lässt sich so ziemlich alles in alles umwandeln und auch alles aus int konstruieren. Daher kommen lauter verschiedene Überladungen gleich gut in Frage. Die Fehlermeldung gibt dir eine Liste der Möglichkeiten, die gefunden wurden.</p>
</blockquote>
<p>Wobei zu erwähnen wäre, dass der gezeigte Code offensichtlich gekürzt wurde, und den beschriebenen Fehler nicht zeigt. Also gut geraten <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>
</blockquote>
<p>doch doch. der gezeigte code sollte alles behinhalten was den fehler angeht.</p>
<p>Meep Meep</p>
</blockquote>
<p>Jetzt habt ihr beide Recht <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>Laut strenger Standardauslegung kommen bei dem Code die beiden Überladungen<br />
<code>(const txl::temporary_object::rect_width&amp;, long int)</code><br />
und<br />
<code>(long int, int)</code> (also eingebauter Operator)<br />
in Frage. Das heißt, dieser Code compiliert nicht, aber ein gutmütiger Compiler (beispielsweise der GCC, der nur warnt) ignoriert eventuell die zweite Möglichkeit, weil sie schlecht passt.</p>
<p>Deine Fehlermeldung listet hingegen 4 verschiedenen Kandidaten auf (aber spricht von &quot;2 Überladungen&quot; <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="😕"
    /> ), von denen ich mir anhand des Codes nicht direkt erklären kann, wieso diese passen sollten, außer durch weitere, nicht gezeigte Konvertierungsoperatoren und/oder Überladungen. Eventuell macht dein Compiler komische Sachen oder du hast den Überblick verloren und relevante Überladungen/Konvertierungen gekürzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479251</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 20:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 20:59:35 GMT]]></title><description><![CDATA[<p>hier nochmal die fehlermeldung mit den zugehoerigen codes:</p>
<pre><code>1&gt;...error C2666: &quot;txl::operator +&quot;: 2 Überladungen haben ähnliche Konvertierungen
[1] 1&gt;...note: kann &quot;txl::point txl::operator +(txl::point &amp;,const txl::distance &amp;) noexcept&quot; sein [bei der Verwendung der argumentbezogenen Suche gefunden]
[2] 1&gt;...note: oder &quot;txl::rect txl::operator +(txl::rect &amp;,const txl::distance &amp;) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
[3] 1&gt;...note: oder &quot;long txl::temporary_object::operator +(const txl::temporary_object::rect_width &amp;,const long) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
[4] 1&gt;...note: oder &quot;long txl::temporary_object::operator +(const txl::temporary_object::rect_height &amp;,const long) noexcept&quot; [bei der Verwendung der argumentbezogenen Suche gefunden]
[5] 1&gt;...note: bei Anpassung der Argumentliste &quot;(txl::temporary_object::rect_width, int)&quot;
</code></pre>
<p>[1] zeile 91<br />
[2] zeile 96<br />
[3] zeile 154<br />
[4] diesen code hab ich euch tatsaechlich unterschlagen. ist operator+ fuer rect_height. 1:1 das selbe wie der operator+ fuer rect_width [3]. gibt nur nen long zurueck.<br />
[5] ist die kommentierte zeile in der WinMain</p>
<p>andere ueberladungen bzw konvertierungen hab ich nicht gemacht.<br />
von rect_height sollte wirklich alles code da sein. und rect_height ist echt ne kopie von rect_width.<br />
mir geht es nur nich in den kopf warum er sich da an den operator+ von rect_width und rect_height stoert. ich seh da keinen zusammenhang, wie er da hin kommt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479260</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 20:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 21:22:12 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>mir geht es nur nich in den kopf warum er sich da an den operator+ <strong>von rect_width</strong> und rect_height stoert. ich seh da keinen zusammenhang, wie er da hin kommt</p>
</blockquote>
<p>Moment, ist das nicht der Operator, den du möchtest? Wenn nicht, dann hast du mich genau so verwirrt wie den Compiler. Das ist jedenfalls der, der gewählt wird, wenn du meinem Tipp mit dem <code>50L</code> folgst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479268</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 21:22:12 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 21:43:33 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>mir geht es nur nich in den kopf warum er sich da an den operator+ <strong>von rect_width</strong> und rect_height stoert. ich seh da keinen zusammenhang, wie er da hin kommt</p>
</blockquote>
<p>Moment, ist das nicht der Operator, den du möchtest? Wenn nicht, dann hast du mich genau so verwirrt wie den Compiler. Das ist jedenfalls der, der gewählt wird, wenn du meinem Tipp mit dem <code>50L</code> folgst.</p>
</blockquote>
<p>ich meinte die beide zusammen. rect_height hat ja nichts mit rect_width zu tun.<br />
in der WinMain hab ich:</p>
<pre><code>width(r2) = width(r1) + 50;
</code></pre>
<p>ich droesel das mal so auf wie ich mir das vorstelle:<br />
<code>width(r2)</code> gibt ein <code>temporary_object::rect_width</code> zurueck.<br />
<code>width(r1)</code> ebenso.<br />
hab ich also <code>temporary_object::rect_width(r2) = temporary_object::rect_width(1) + 50;</code><br />
fuer <code>temporary_object::rect_width</code> hab ich nen <code>operator+</code> , der wiederrum einen long zurueck gibt.<br />
ergibt: <code>temporary_object::rect_width = operator+(temporary_object::rect_width(r1), 50)</code> .<br />
nachdem der <code>operator+</code> einen long zurueck gibt, bleibt <code>temporary_object::rect_width(r2) = long_value</code> ueberig.</p>
<p>also woher das problem mit rect_height ? und die anderen operatoren [1] und [2] sind mir noch raetselhafter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479275</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 21:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 21:50:04 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>also woher das problem mit rect_height ? und die anderen operatoren [1] und [2] sind mir noch raetselhafter</p>
</blockquote>
<p>Ich kann, wie camper auch, die vollständige Fehlermeldung mit dem gezeigten Code nicht nachvollziehen. Zeigt der gekürzte Code bei dir wirklich noch die vollständige Meldung?</p>
<p>Die Meldung ist ja sowieso etwas merkwürdig, da erst gesagt wird, es gäbe 2 Möglichkeiten und dann werden 4 gelistet und die offensichtliche (long, int) ist nicht einmal dabei. Es wäre durchaus vorstellbar, dass dein Compiler da eine Falschmeldung abgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479276</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 21:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 21:53:00 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>also woher das problem mit rect_height ? und die anderen operatoren [1] und [2] sind mir noch raetselhafter</p>
</blockquote>
<p>Ich kann, wie camper auch, die vollständige Fehlermeldung mit dem gezeigten Code nicht nachvollziehen. Zeigt der gekürzte Code bei dir wirklich noch die vollständige Meldung?</p>
<p>Die Meldung ist ja sowieso etwas merkwürdig, da erst gesagt wird, es gäbe 2 Möglichkeiten und dann werden 4 gelistet und die offensichtliche (long, int) ist nicht einmal dabei. Es wäre durchaus vorstellbar, dass dein Compiler da eine Falschmeldung abgibt.</p>
</blockquote>
<p>ja es ist wirklich alles fabei.<br />
das einzige was ich weg getan hab sind die pfadangaben der dateien. weil die fuer das problem irrelevant sind. sonst ist alles dabei.<br />
verwende ueberigens die VS 2015 community.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479278</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 21:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 22:32:32 GMT]]></title><description><![CDATA[<p>Interessant. Der GCC 5 sagt dazu nämlich nur:</p>
<pre><code>warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
   width(r2) = width(r1) + 50; // hier wird der fehler angezeigt
                           ^
test.cc:155:17: note: candidate 1: long int txl::temporary_object::operator+(const txl::temporary_object::rect_width&amp;, long int)
     inline auto operator+(const rect_width &amp;r, const long value) noexcept -&gt; lo
                 ^
test.cc:203:27: note: candidate 2: operator+(long int, int) &lt;built-in&gt;
   width(r2) = width(r1) + 50; // hier wird der fehler angezeigt
</code></pre>
<p>Und diese Meldung kann ich auch nachvollziehen. Aber die Regeln für Funktionsüberladungsauflösung sind ziemlich arkan, ich mag mich nicht aus dem Fenster lehnen und sagen, welche Compiler hier recht hat, jedenfalls nicht ohne vorher ein paar Stunden mein Regelverständnis aufzufrischen. Nachvollziehbar heißt schließlich nicht unbedingt das gleiche wie standardkonform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479287</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 12 Dec 2015 22:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ problem [bei der Verwendung der argumentbezogenen Suche gefunden] on Sat, 12 Dec 2015 22:42:07 GMT]]></title><description><![CDATA[<p>ja die fehlermeldung gefaellt mir auch. einmal addition ueber den konvertierungsoperator von rect_width (build-in) und dann der freie operator+ mit rect_width als parameter.</p>
<p>ich denk mal das da wirklich was mit dem VC2015 schief laeuft.<br />
ich werd morgen mal schauen ob ich ein reproduzierendes beispiel machen kann, das wesendlich kuerzer und lauffig ist.</p>
<p>danke dir erstmal</p>
<p>Meep Meep<br />
PS laeuffaehig im sinne von das er wieder so eine falsche oder nichtnachvollziehende fehlermeldung bringt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479289</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 12 Dec 2015 22:42:07 GMT</pubDate></item></channel></rss>