<?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[Problem mit Konvertierungskonstruktor]]></title><description><![CDATA[<p>Hallo @ all,<br />
hier ein minimales Beispiel meines Problems:</p>
<pre><code class="language-cpp">class Test
{
  public:
  Test() {}
  Test(int d) {}
  Test a() { return 4; }
};

int main()
{
  Test b;
  Test c=b.a();
}
</code></pre>
<p>Mein Compiler (TDM-GCC 4.5.0) zeigt dabei folgenden Fehler an:</p>
<pre><code>test.cpp:10:8: error: no matching function for call to Test::Test()
test.cpp:4:3: note: candidates are: Test::Test(int)
test.cpp:2:1: note:                 Test::Test(const Test&amp;)
</code></pre>
<p>Eigentlich sollte der Konvertierungskonstruktor benutzt werden um den int in ein Objekt des Typs Test zu überführen. Was der Compiler aber nicht macht. Auch wenn ich folgende Zeile benutze funktioniert es nicht (gleicher Fehler):</p>
<pre><code class="language-cpp">return Test(4);
</code></pre>
<p>Wessen Fehler ist das: meiner oder der des Compilers <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>Grüsse<br />
player424</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272139/problem-mit-konvertierungskonstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 01:10:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272139.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Aug 2010 12:25:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 12:30:47 GMT]]></title><description><![CDATA[<p>Hallo @ all,<br />
hier ein minimales Beispiel meines Problems:</p>
<pre><code class="language-cpp">class Test
{
  public:
  Test() {}
  Test(int d) {}
  Test a() { return 4; }
};

int main()
{
  Test b;
  Test c=b.a();
}
</code></pre>
<p>Mein Compiler (TDM-GCC 4.5.0) zeigt dabei folgenden Fehler an:</p>
<pre><code>test.cpp:10:8: error: no matching function for call to Test::Test()
test.cpp:4:3: note: candidates are: Test::Test(int)
test.cpp:2:1: note:                 Test::Test(const Test&amp;)
</code></pre>
<p>Eigentlich sollte der Konvertierungskonstruktor benutzt werden um den int in ein Objekt des Typs Test zu überführen. Was der Compiler aber nicht macht. Auch wenn ich folgende Zeile benutze funktioniert es nicht (gleicher Fehler):</p>
<pre><code class="language-cpp">return Test(4);
</code></pre>
<p>Wessen Fehler ist das: meiner oder der des Compilers <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>Grüsse<br />
player424</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938670</guid><dc:creator><![CDATA[player424]]></dc:creator><pubDate>Wed, 11 Aug 2010 12:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 12:28:55 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>deiner <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>Und zwar fehlt der Default-Konstruktor hier:</p>
<pre><code class="language-cpp">Test b;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1938674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938674</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 11 Aug 2010 12:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 12:30:32 GMT]]></title><description><![CDATA[<p>Ok danke, aber diesen Fehler habe ich jetzt nur bei diesem Beispiel gemacht. Ich ergänze das eben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938677</guid><dc:creator><![CDATA[player424]]></dc:creator><pubDate>Wed, 11 Aug 2010 12:30:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 12:32:37 GMT]]></title><description><![CDATA[<p>Jetzt gibt es aber eine 'matching function for call to Test::Test()'. Bist du sicher, dass mit dem Beispiel derselbe Fehler auftritt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938679</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 11 Aug 2010 12:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 12:42:17 GMT]]></title><description><![CDATA[<p>Ja jetzt kompiliert er das Minimalbeispiel <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="😞"
    /> . Ich poste einmal den Code in dem Das Problem auftritt.</p>
<pre><code class="language-cpp">class Socket
{
  public:
  Socket();
  Socket(const char *, int);
  Socket(Socket&amp;);
  Socket(SOCKET);
  ~Socket();

  void Connect(const char *, int);
  void Write(const void *, int);
  void Read(void *, int);
  void Bind(int);
  void Listen(int);
  Socket Accept();

  void Close();

  Socket&amp; operator=(const Socket&amp;);
  Socket&amp; operator&lt;&lt;(const std::string&amp;);
  Socket&amp; operator&lt;&lt;(int);
  Socket&amp; operator&lt;&lt;(float);

  Socket&amp; operator&gt;&gt;(int&amp;);
  Socket&amp; operator&gt;&gt;(float&amp;);

  SOCKET GetDescriptor() const;

  private:
  SOCKET s;
  static int numInstances;
  static void InitWinsock()
  {
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2,2), &amp;wsa)!=0)
      throw SocketException(&quot;WSAStartup failed&quot;);
  }
};
</code></pre>
<p>Hier die Methode in der der Fehler auftritt</p>
<pre><code class="language-cpp">Socket Socket::Accept()
{
  SOCKET descriptor;

  descriptor = accept(s, NULL, NULL);
  if (descriptor==INVALID_SOCKET)
    throw SocketException(&quot;Accept gescheitert&quot;);

  return descriptor;
}
</code></pre>
<p>Edit:<br />
Hier noch die Fehlermeldung des Compilers</p>
<pre><code>no matching function for call to Socket::Socket(Socket)

Als candidates zeigt er an:
Socket::Socket(SOCKET)
Socket::Socket(Socket&amp;)
Socket::Socket(const char *, int)
Socket::Socket()
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1938681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938681</guid><dc:creator><![CDATA[player424]]></dc:creator><pubDate>Wed, 11 Aug 2010 12:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 12:56:17 GMT]]></title><description><![CDATA[<p>Du hast keinen Kopierkonstruktor. Hat das einen bestimmten Grund, dass <code>Socket::Socket(Socket&amp;)</code> eine nicht-const-Referenz nimmt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938691</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 11 Aug 2010 12:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 13:36:41 GMT]]></title><description><![CDATA[<p>Doch das &quot;Socket::Socket(Socket&amp;)&quot; ist doch der Kopierkonstruktor. Was die const-Referenz angeht: es hat keinen bestimmten Grund. Das werde ich später noch ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938725</guid><dc:creator><![CDATA[player424]]></dc:creator><pubDate>Wed, 11 Aug 2010 13:36:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 13:46:43 GMT]]></title><description><![CDATA[<p>player424 schrieb:</p>
<blockquote>
<p>Doch das &quot;Socket::Socket(Socket&amp;)&quot; ist doch der Kopierkonstruktor.</p>
</blockquote>
<p>Genau. Und was meint wohl der Compiler in Ausdrücken wie <code>Socket a = sock.Acceppt()</code> , wenn der Kopierkonstruktor (von a) eine nicht konstante Referenz verlangt und einen R-Value bekommt? Also mach eine const-Referenz draus <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/1938732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938732</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 11 Aug 2010 13:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 13:52:27 GMT]]></title><description><![CDATA[<p>OK, dann ist das vielleicht <em>auch</em> ein Kopierkonstruktor. Aber keiner, der an der Stelle anwendbar ist <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>edit: Das Problem entsteht schon beim return, da der return-Ausdruck ja das Ergebnis einer impliziten Konvertierung und damit ein temporäres Objekt ist, welches nur an const-Referenzen gebunden werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938736</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 11 Aug 2010 13:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 14:04:42 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>edit: Das Problem entsteht schon beim return, da der return-Ausdruck ja das Ergebnis einer impliziten Konvertierung und damit ein temporäres Objekt ist, welches nur an const-Referenzen gebunden werden kann.</p>
</blockquote>
<p>Stimmt. Ich hatte überlesen, dass <code>descriptor</code> ein SOCKET und kein Socket ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938740</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 11 Aug 2010 14:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konvertierungskonstruktor on Wed, 11 Aug 2010 15:13:16 GMT]]></title><description><![CDATA[<p>Nun funktioniert es <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="🙂"
    /> .Vielen Dank für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1938759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1938759</guid><dc:creator><![CDATA[player424]]></dc:creator><pubDate>Wed, 11 Aug 2010 15:13:16 GMT</pubDate></item></channel></rss>