<?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[Reference auf Objekt im shared_ptr]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mal wieder ein Problem.</p>
<p>Ich habe einen std::vector mit std::shared_ptr&lt;TcpSocket&gt;. Wenn ich nun einen ptr aus dem Vector nehme und an eine Funktion übergeben will, die eine Reference auf den TcpSocket darin haben will, bekomme ich eine Fehlermeldung, die ich nicht zu lösen weiß.<br />
Ich habe schon mehrere Varianten ausprobiert mit const_cast und Zwischenspeichern des rohen Pointers, das hat aber alles nicht funktioniert.</p>
<p>Fehler:<br />
error C2664: 'sf::TcpSocket::TcpSocket(const sf::TcpSocket &amp;)': Konvertierung des Parameters 1 von 'sf::TcpSocket *' in 'const sf::TcpSocket &amp;' nicht möglich</p>
<pre><code>connected_clients.push_back(std::make_shared&lt;TcpSocket&gt;(new TcpSocket()));
listener.accept(*connected_clients.back().get());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/324482/reference-auf-objekt-im-shared_ptr</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 02:51:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324482.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Mar 2014 23:01:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Tue, 18 Mar 2014 23:01:32 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mal wieder ein Problem.</p>
<p>Ich habe einen std::vector mit std::shared_ptr&lt;TcpSocket&gt;. Wenn ich nun einen ptr aus dem Vector nehme und an eine Funktion übergeben will, die eine Reference auf den TcpSocket darin haben will, bekomme ich eine Fehlermeldung, die ich nicht zu lösen weiß.<br />
Ich habe schon mehrere Varianten ausprobiert mit const_cast und Zwischenspeichern des rohen Pointers, das hat aber alles nicht funktioniert.</p>
<p>Fehler:<br />
error C2664: 'sf::TcpSocket::TcpSocket(const sf::TcpSocket &amp;)': Konvertierung des Parameters 1 von 'sf::TcpSocket *' in 'const sf::TcpSocket &amp;' nicht möglich</p>
<pre><code>connected_clients.push_back(std::make_shared&lt;TcpSocket&gt;(new TcpSocket()));
listener.accept(*connected_clients.back().get());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2389653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389653</guid><dc:creator><![CDATA[Schamote]]></dc:creator><pubDate>Tue, 18 Mar 2014 23:01:32 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Tue, 18 Mar 2014 23:08:18 GMT]]></title><description><![CDATA[<pre><code>connected_clients.push_back(std::make_shared&lt;TcpSocket&gt;(new TcpSocket()));
listener.accept(*(connected_clients.back()-&gt;get()));
</code></pre>
<p>Manchmal hilft es, das Hirn anzuschmeissen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389654</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 18 Mar 2014 23:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Tue, 18 Mar 2014 23:10:17 GMT]]></title><description><![CDATA[<pre><code>*connected_clients.back().get()
</code></pre>
<p>Das <code>get()</code> ist hierbei überflüssig, der überladene Dereferenzierungs-Operator tut es auch.</p>
<p>Normalerweise kann so eine Fehlermeldung nicht bei dem gezeigten Code entstehen.</p>
<p>Edit: Habe ich was missverstanden, oder was zeigt manni da?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389655</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 18 Mar 2014 23:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Tue, 18 Mar 2014 23:17:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Manchmal hilft es, das Hirn anzuschmeissen ...</p>
</blockquote>
<p>Das gilt wohl in erster Linie für dich? Schon deswegen, weil sowohl der Punkt- als auch der Pfeil-Operator stärker binden als der Dereferenzierungs-operator. Daher sind etwaige Klammern natürlich überflüssig. Außerdem sehe ich nicht, woraus du schließt, dass <code>TcpSocket</code> eine Memberfunktion namens <code>get</code> hat.</p>
<p>Edit: Das kommt laut Fehlermeldung aus SFML: <a href="http://sfml-dev.org/documentation/2.0/classsf_1_1TcpSocket.php" rel="nofollow">sf::TcpSocket</a> hat keine solche Memberfunktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389656</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 18 Mar 2014 23:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 00:30:00 GMT]]></title><description><![CDATA[<p>Das get() bezieht sich auf den shared_ptr, das habe ich nur eingefügt, um sicher zu gehen, dass ich wirklich den enthaltenden Pointer vor mir habe.</p>
<p>Hinter der eigentlichen Fehlermeldung ist noch ein etwas längerer Teil, der wahrscheinlich dazugehört, aber für mich nicht aussagekräftig ist, vielleicht kann da ja noch jemand etwas mit anfangen.</p>
<blockquote>
<p>c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(873): error C2664: 'sf::TcpSocket::TcpSocket(const sf::TcpSocket &amp;)': Konvertierung des Parameters 1 von 'sf::TcpSocket *' in 'const sf::TcpSocket &amp;' nicht möglich<br />
1&gt; Ursache: Konvertierung von 'sf::TcpSocket *' in 'const sf::TcpSocket' nicht möglich<br />
1&gt; Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig<br />
1&gt; c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;std::_Ref_count_obj&lt;_Ty&gt;::_Ref_count_obj<a href="sf::TcpSocket" rel="nofollow">sf::TcpSocket</a>(_V0_t &amp;&amp;)&quot;.<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Ty=sf::TcpSocket,<br />
1&gt; _V0_t=sf::TcpSocket *<br />
1&gt; ]<br />
1&gt; c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;std::_Ref_count_obj&lt;_Ty&gt;::_Ref_count_obj<a href="sf::TcpSocket" rel="nofollow">sf::TcpSocket</a>(_V0_t &amp;&amp;)&quot;.<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Ty=sf::TcpSocket,<br />
1&gt; _V0_t=sf::TcpSocket *<br />
1&gt; ]<br />
1&gt; d:\daten\projekte\server-to-be-determined\server-to-be-determined\clientmanager.cpp(21): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;std::shared_ptr&lt;_Ty&gt; std::make_shared<a href="sf::TcpSocket,sf::TcpSocket*" rel="nofollow">sf::TcpSocket,sf::TcpSocket*</a>(_V0_t &amp;&amp;)&quot;.<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Ty=sf::TcpSocket,<br />
1&gt; _V0_t=sf::TcpSocket *<br />
1&gt; ]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2389660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389660</guid><dc:creator><![CDATA[Schamote]]></dc:creator><pubDate>Wed, 19 Mar 2014 00:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 01:12:21 GMT]]></title><description><![CDATA[<p>Ich bin verdammt blind: Der Fehler befindet sich in der Zeile mit dem <code>push_back</code> . Die habe ich mir gar nicht angeschaut.</p>
<p>Ändere das einfach ab zu</p>
<pre><code>connected_clients.emplace_back( std::make_shared&lt;TcpSocket&gt;() );
</code></pre>
<p>, dann kompiliert es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389664</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 19 Mar 2014 01:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 01:17:29 GMT]]></title><description><![CDATA[<p>Danke, es funktionert,<br />
kannst du aber vielleicht erklären, wieso das jetzt geht bzw. einen Link zu einem Artikel oderso schicken?<br />
Ich habe mir zwar die Docu angeschaut, aber so wie ich das verstehe, war das jetzt nur eine &quot;Umformulierung&quot; des Quellcodes, wobei der Inhalt enthalten bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389665</guid><dc:creator><![CDATA[Schamote]]></dc:creator><pubDate>Wed, 19 Mar 2014 01:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 09:41:24 GMT]]></title><description><![CDATA[<p><code>make_shared</code> nimmt nur die Argumente für den Konstruktor, den <code>new</code> -Aufruf macht die Funktion schon selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389700</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 19 Mar 2014 09:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 10:18:05 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Ändere das einfach ab zu</p>
<pre><code>connected_clients.emplace_back( std::make_shared&lt;TcpSocket&gt;() );
</code></pre>
<p>, dann kompiliert es.</p>
</blockquote>
<p>Wobei <code>emplace_back()</code> hier nichts bringt, du könntest auch <code>push_back()</code> nehmen.</p>
<p>Ich persönlich behalte mir Emplacement für die Fälle vor, wo ich direkt Konstruktorargumente (aber nicht für den Kopierkonstruktor) übergebe. Das macht den Code etwas aussagekräftiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389704</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 19 Mar 2014 10:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 10:21:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Mir ist gerade erst aufgefallen, dass alle <code>push_back</code> s natürlich auch moven. Hätte ich mir selbst denken können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389705</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 19 Mar 2014 10:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Reference auf Objekt im shared_ptr on Wed, 19 Mar 2014 12:43:55 GMT]]></title><description><![CDATA[<p>Ok, ich glaube ich habe es verstanden <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>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389725</guid><dc:creator><![CDATA[Schamote]]></dc:creator><pubDate>Wed, 19 Mar 2014 12:43:55 GMT</pubDate></item></channel></rss>