<?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[Komisches Verhalten von cout in CONST Methode]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich teste gerade den folgenden Source aus dem Buch &quot;Beyond the C++ Standard Library&quot;.</p>
<pre><code>#include &quot;stdafx.h&quot;

#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;

using namespace std;

class status 
{
	std::string m_name;
	bool m_ok;
public:
	status(const std::string name) : m_name(name), m_ok(true) {}

	void break_it() {m_ok = false;}
	bool is_broken() const {return m_ok;}
	void report() const 
	{
		std::cout &lt;&lt; m_name;
		std::cout &lt;&lt; &quot; is &quot; &lt;&lt; (m_ok ? &quot;working normally&quot; : &quot;terribly broken&quot;) &lt;&lt; '\n';
	}
};

int main(int argc, char* argv[])
{
	using namespace std::placeholders;

	vector&lt;status&gt; statuses;
	statuses.push_back(status(&quot;status 1&quot;));
	statuses.push_back(status(&quot;status 2&quot;));
	statuses.push_back(status(&quot;status 3&quot;));
	statuses.push_back(status(&quot;status 4&quot;));

	statuses[1].break_it();
	statuses[2].break_it();

	for (auto it(begin(statuses)); it != end(statuses); ++it)
		it-&gt;report();

	for_each(begin(statuses), end(statuses), std::mem_fun_ref(&amp;status::report));

	for_each(begin(statuses), end(statuses), std::bind(&amp;status::report, std::placeholders::_1));

	std::cin.get();

	return 0;
}
</code></pre>
<p>Dieser Code sollte laut dem Buch und auch meiner Meinung nach funktionieren.<br />
Dies klappt aber nicht, bereits in der IDE (Visual Studio 2010) wird in Zeile 22<br />
der &lt;&lt;-Operator unkringelt</p>
<pre><code>std::cout &lt;&lt; m_name;
</code></pre>
<p>Beim Compilieren tritt die folgende Fehlermeldung auf</p>
<blockquote>
<p>error C2679: Binärer Operator '&lt;&lt;': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'const std::string' akzeptiert (oder keine geeignete Konvertierung möglich)</p>
</blockquote>
<p>Das Programm funktioniert wenn die Zeile 22 folgendermassen ändere.</p>
<pre><code>std::cout &lt;&lt; m_name.c_str();
</code></pre>
<p>Wie kann man sich dieses Verhalten erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326206/komisches-verhalten-von-cout-in-const-methode</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 09:30:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326206.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Jun 2014 10:45:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Komisches Verhalten von cout in CONST Methode on Fri, 06 Jun 2014 10:45:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich teste gerade den folgenden Source aus dem Buch &quot;Beyond the C++ Standard Library&quot;.</p>
<pre><code>#include &quot;stdafx.h&quot;

#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;

using namespace std;

class status 
{
	std::string m_name;
	bool m_ok;
public:
	status(const std::string name) : m_name(name), m_ok(true) {}

	void break_it() {m_ok = false;}
	bool is_broken() const {return m_ok;}
	void report() const 
	{
		std::cout &lt;&lt; m_name;
		std::cout &lt;&lt; &quot; is &quot; &lt;&lt; (m_ok ? &quot;working normally&quot; : &quot;terribly broken&quot;) &lt;&lt; '\n';
	}
};

int main(int argc, char* argv[])
{
	using namespace std::placeholders;

	vector&lt;status&gt; statuses;
	statuses.push_back(status(&quot;status 1&quot;));
	statuses.push_back(status(&quot;status 2&quot;));
	statuses.push_back(status(&quot;status 3&quot;));
	statuses.push_back(status(&quot;status 4&quot;));

	statuses[1].break_it();
	statuses[2].break_it();

	for (auto it(begin(statuses)); it != end(statuses); ++it)
		it-&gt;report();

	for_each(begin(statuses), end(statuses), std::mem_fun_ref(&amp;status::report));

	for_each(begin(statuses), end(statuses), std::bind(&amp;status::report, std::placeholders::_1));

	std::cin.get();

	return 0;
}
</code></pre>
<p>Dieser Code sollte laut dem Buch und auch meiner Meinung nach funktionieren.<br />
Dies klappt aber nicht, bereits in der IDE (Visual Studio 2010) wird in Zeile 22<br />
der &lt;&lt;-Operator unkringelt</p>
<pre><code>std::cout &lt;&lt; m_name;
</code></pre>
<p>Beim Compilieren tritt die folgende Fehlermeldung auf</p>
<blockquote>
<p>error C2679: Binärer Operator '&lt;&lt;': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'const std::string' akzeptiert (oder keine geeignete Konvertierung möglich)</p>
</blockquote>
<p>Das Programm funktioniert wenn die Zeile 22 folgendermassen ändere.</p>
<pre><code>std::cout &lt;&lt; m_name.c_str();
</code></pre>
<p>Wie kann man sich dieses Verhalten erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2402719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2402719</guid><dc:creator><![CDATA[WiederMalamRaetseln]]></dc:creator><pubDate>Fri, 06 Jun 2014 10:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von cout in CONST Methode on Fri, 06 Jun 2014 10:55:11 GMT]]></title><description><![CDATA[<p>Versuch mal &lt;string&gt; zu inkludieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2402721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2402721</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 06 Jun 2014 10:55:11 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von cout in CONST Methode on Fri, 06 Jun 2014 10:56:06 GMT]]></title><description><![CDATA[<p>Ist der Code wirklich so in &quot;Beyond the C++ Standard Library&quot; drin? Der hat nämlich zahlreiche Fehler und Unschönheiten:</p>
<ul>
<li>#include &lt;string&gt; fehlt. Das ist wohl dein Problem. Der Author verlässt sich da auf nicht garantierte Abhängigkeiten der Headerdateien.</li>
<li>is_broken sollte !m_ok zurückgeben</li>
<li>m_ um Member zu kennzeichnen ist nicht mehr in Mode.</li>
<li>report() sollte keine Memberfunktion sein.</li>
<li>using namespace std; aber trotzdem std::XYZ? Der soll sich für eines entscheiden. Empfohlen wird auf using namespace std; zu verzichten.</li>
<li>int argc, const char *argv[] als Parameter von main, werden aber nicht gebraucht.</li>
<li>statuses -- lol?</li>
<li>std::mem_fun_ref vom Standard veraltet, wird bald aus der Standardbibliothek entfernt.</li>
<li>it(begin(statuses)) -- sehr unüblicher Stil.</li>
<li>for (auto it(begin(statuses)); it != end(statuses); ++it) -- rofl? for (auto&amp; s : statXXXX)</li>
<li>std::cin.get(); -- IDE richtig einstellen.</li>
<li>return 0; -- nicht notwendig.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2402722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2402722</guid><dc:creator><![CDATA[badcode]]></dc:creator><pubDate>Fri, 06 Jun 2014 10:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von cout in CONST Methode on Fri, 06 Jun 2014 11:04:12 GMT]]></title><description><![CDATA[<p>Gar nicht gesehen: <code>const std::string name</code> als Parameter ist sehr teuer.</p>
<pre><code class="language-cpp">status(std::string name) : name(std::move(name)), m_ok(true) {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2402723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2402723</guid><dc:creator><![CDATA[badcode]]></dc:creator><pubDate>Fri, 06 Jun 2014 11:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von cout in CONST Methode on Fri, 06 Jun 2014 11:07:30 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>der Header &lt;string&gt; fehlte! Mist. In dem Buch werden nur Code-Snippets aufgeführt ohne Header.</p>
<p>Problem gelöst!</p>
<p>Aber!</p>
<p>badcode schrieb:</p>
<blockquote>
<ul>
<li>is_broken sollte !m_ok zurückgeben</li>
<li>report() sollte keine Memberfunktion sein.</li>
<li>int argc, const char *argv[] als Parameter von main, werden aber nicht gebraucht.</li>
<li>statuses -- lol?</li>
<li>std::mem_fun_ref vom Standard veraltet, wird bald aus der</li>
</ul>
</blockquote>
<p>steht so im Buch, mache ich auch anders</p>
<p>badcode schrieb:</p>
<blockquote>
<p>[*]m_ um Member zu kennzeichnen ist nicht mehr in Mode.</p>
</blockquote>
<p>Warum? Ist Firmenstandard.</p>
<p>badcode schrieb:</p>
<blockquote>
<p>[*] using namespace std; aber trotzdem std::XYZ? Der soll sich für eines entscheiden. Empfohlen wird auf using namespace std; zu verzichten.</p>
</blockquote>
<p>Warum? In Klassen-Definitionen verwende ich std:: weil ich sie in Header-Dateien auslagere, in CPP-Dateien vereinfacht es das Lesen. (Meine Meinung)</p>
<p>badcode schrieb:</p>
<blockquote>
<p>[*]it(begin(statuses)) -- sehr unüblicher Stil.</p>
</blockquote>
<p>Warum? hier wird ein neues Objekt angelegt.</p>
<p>badcode schrieb:</p>
<blockquote>
<p>[*]std::cin.get(); -- IDE richtig einstellen.</p>
</blockquote>
<p>Wie?</p>
<p>badcode schrieb:</p>
<blockquote>
<p>[*]return 0; -- nicht notwendig.</p>
</blockquote>
<p>[/quote]<br />
Seid wann?</p>
<p>Mehr Fragen, als Antworten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2402724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2402724</guid><dc:creator><![CDATA[WiederMalamRaetseln]]></dc:creator><pubDate>Fri, 06 Jun 2014 11:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von cout in CONST Methode on Fri, 06 Jun 2014 11:09:02 GMT]]></title><description><![CDATA[<p>Auch klar, falsch abgetippt....</p>
<p>badcode schrieb:</p>
<blockquote>
<p>Gar nicht gesehen: <code>const std::string name</code> als Parameter ist sehr teuer.</p>
<pre><code class="language-cpp">status(std::string name) : name(std::move(name)), m_ok(true) {}
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2402725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2402725</guid><dc:creator><![CDATA[WiederMalamRaetseln]]></dc:creator><pubDate>Fri, 06 Jun 2014 11:09:02 GMT</pubDate></item></channel></rss>