<?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[Frage zu Beispiel aus C++ Primer zu Namespaces]]></title><description><![CDATA[<p>Hallo, ich lerne gerade C++ mit dem C++ Primer (vierte Auflage von 2006). Dort steht zu Funktionssuche in Namespaces (S.845) folgendes:</p>
<blockquote>
<p>Funktionen einschließlich überladener Operatoren, die Parameter vom Klassentyp (bzw. Zeiger oder Referenzen auf einen solchen) übernehmen und im selben Namensbereich wie die Klasse selbst definiert werden, sind sichtbar, wenn ein Objekt vom Klassentyp (bzw. eine Referenz oder ein Zeiger auf einen solchen) als Argument verwendet wird.</p>
</blockquote>
<p>Als Beispiel ist dann das hier angegeben:</p>
<pre><code>std::string s;
getline(std::cin, s); //O.K., Sucht getline auch in den Namensräumen, in denen cin und string definiert sind
</code></pre>
<p>Aber was mich verwirrt: Dieses Beispiel sollte kompilieren, aber tut es bei mir nicht:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
	std::string s;
	cin&gt;&gt;s; //Sollte eigentlich std::cin finden, da s in std:: definiert ist
}
</code></pre>
<p>Wenn ich das mit dem Visual Studio 2012 kompilieren will, bekomme ich die Meldung, dass cin nicht gefunden werden kann (wenn ich explizit std::cin schreibe, dann komiliert es).</p>
<p>Verstehe ich die Stelle im Primer falsch oder hat sich an der Namensauflösung seitdem etwas geändert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314207/frage-zu-beispiel-aus-c-primer-zu-namespaces</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 09:48:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314207.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Feb 2013 16:03:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sat, 23 Feb 2013 16:03:56 GMT]]></title><description><![CDATA[<p>Hallo, ich lerne gerade C++ mit dem C++ Primer (vierte Auflage von 2006). Dort steht zu Funktionssuche in Namespaces (S.845) folgendes:</p>
<blockquote>
<p>Funktionen einschließlich überladener Operatoren, die Parameter vom Klassentyp (bzw. Zeiger oder Referenzen auf einen solchen) übernehmen und im selben Namensbereich wie die Klasse selbst definiert werden, sind sichtbar, wenn ein Objekt vom Klassentyp (bzw. eine Referenz oder ein Zeiger auf einen solchen) als Argument verwendet wird.</p>
</blockquote>
<p>Als Beispiel ist dann das hier angegeben:</p>
<pre><code>std::string s;
getline(std::cin, s); //O.K., Sucht getline auch in den Namensräumen, in denen cin und string definiert sind
</code></pre>
<p>Aber was mich verwirrt: Dieses Beispiel sollte kompilieren, aber tut es bei mir nicht:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
	std::string s;
	cin&gt;&gt;s; //Sollte eigentlich std::cin finden, da s in std:: definiert ist
}
</code></pre>
<p>Wenn ich das mit dem Visual Studio 2012 kompilieren will, bekomme ich die Meldung, dass cin nicht gefunden werden kann (wenn ich explizit std::cin schreibe, dann komiliert es).</p>
<p>Verstehe ich die Stelle im Primer falsch oder hat sich an der Namensauflösung seitdem etwas geändert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301395</guid><dc:creator><![CDATA[Iskandr]]></dc:creator><pubDate>Sat, 23 Feb 2013 16:03:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sat, 23 Feb 2013 16:08:03 GMT]]></title><description><![CDATA[<p>Nun, cin ist ja keine Funktion, mag das evtl. das Problem sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301396</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 23 Feb 2013 16:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sat, 23 Feb 2013 16:14:05 GMT]]></title><description><![CDATA[<p>Ah, jetzt weiß ich wo der Fehler liegt:<br />
Der operator würde zwar gefunden (std::operator&gt;&gt;(std::cin, s) ), aber cin ist ja ein Objekt, weswegen dort std:: stehen muss. Ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301399</guid><dc:creator><![CDATA[Iskandr]]></dc:creator><pubDate>Sat, 23 Feb 2013 16:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sat, 23 Feb 2013 16:15:47 GMT]]></title><description><![CDATA[<p>Nee, ich glaube auch der operator wurde nicht gefunden, weil der Compiler ja mit cin nichts anfangen kann. Aber er wird gefunden wenn man std::cin und std::string als Argumente angibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301400</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 23 Feb 2013 16:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sat, 23 Feb 2013 16:17:09 GMT]]></title><description><![CDATA[<p>Ja so ähnlich wollte ich das auch sagen :&gt;<br />
Gut, dann hab ichs jetzt verstanden. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301401</guid><dc:creator><![CDATA[Iskandr]]></dc:creator><pubDate>Sat, 23 Feb 2013 16:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sun, 24 Feb 2013 11:46:10 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>der Primer ist bei genauer Durchsicht voll von solch kleinen Fehlerchen. Das lädt aber zum Nachdenken und zur Selbsthilfe ein. Es bleibt dabei: extrem gutes und geradezu spannendes Lehrbuch!</p>
<p>Überzeugt<br />
Pluto</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301610</guid><dc:creator><![CDATA[Pluto]]></dc:creator><pubDate>Sun, 24 Feb 2013 11:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sun, 24 Feb 2013 13:05:14 GMT]]></title><description><![CDATA[<p>Iskandr schrieb:</p>
<blockquote>
<blockquote>
<p>Funktionen einschließlich überladener Operatoren, die Parameter vom Klassentyp (bzw. Zeiger oder Referenzen auf einen solchen) übernehmen und im selben Namensbereich wie die Klasse selbst definiert werden, sind sichtbar, wenn ein Objekt vom Klassentyp (bzw. eine Referenz oder ein Zeiger auf einen solchen) als Argument verwendet wird.</p>
</blockquote>
</blockquote>
<p>Als erstes mal würde ich den Satz vereinfachen: Funktionen, die Parameter einer Klasse erwarten und im selben Namensbereich wie die Klasse selbst definiert sind, sind sichtbar, wenn eine Instanz dieser Klasse als Argument verwendet wird. (Argument-dependent name lookup)</p>
<p>Also, um was geht es hier? Um Funktionen. Ist cin eine Funktion? Nein, es ist eine Instanz. Dennoch findet in deinem Beispiel ADL statt. Schreiben wir es mal um:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s;
	operator&gt;&gt;( std::cin, s ); // operator&gt;&gt; wird ohne Angabe eines Qualifizierers gefunden. std::operator&gt;&gt; ist nicht notwendig.
}
</code></pre>
<p>Pluto schrieb:</p>
<blockquote>
<p>der Primer ist bei genauer Durchsicht voll von solch kleinen Fehlerchen. Das lädt aber zum Nachdenken und zur Selbsthilfe ein. Es bleibt dabei: extrem gutes und geradezu spannendes Lehrbuch!o</p>
</blockquote>
<p>Wo ist hier ein Fehlerchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301622</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 24 Feb 2013 13:05:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Beispiel aus C++ Primer zu Namespaces on Sun, 24 Feb 2013 23:03:47 GMT]]></title><description><![CDATA[<p>Naja, der &quot;Fehler&quot; liegt daran, dass der Primer folgendes schreibt:</p>
<blockquote>
<p>Nehmen Sie das folgende Einfache Programm</p>
<p>std::string s;<br />
cin &gt;&gt; s;</p>
<p>Ohne diese Ausnahme von der Suchregeln müssten wir eine der beiden folgenden Zeilen schreiben:</p>
<p>using std::operator&gt;&gt;;<br />
std::operator&gt;&gt;(std::cin, s);</p>
</blockquote>
<p>In dem Beispiel hat das cin kein std::, weshalb ich anfangs auch so verwirrt war <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2301783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2301783</guid><dc:creator><![CDATA[Iskandr]]></dc:creator><pubDate>Sun, 24 Feb 2013 23:03:47 GMT</pubDate></item></channel></rss>