<?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[const und operator []]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Erstmal der Code:</p>
<pre><code class="language-cpp">int MageTalentBaum::getTalentPoints(const string &amp;talent) const{
	return talents[talent];
}
</code></pre>
<p>talents ist eine std::map<a href="std:.string,int" rel="nofollow">std:.string,int</a>.</p>
<p>Als Fehlermeldung kommt dann:</p>
<blockquote>
<p>.\talentbaum.cpp(89) : error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const std::map&lt;_Kty,_Ty&gt;' akzeptiert (oder keine geeignete Konvertierung möglich)<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Kty=std::string,<br />
1&gt; _Ty=int<br />
1&gt; ]<br />
1&gt; C:\Programme\Microsoft Visual Studio 8\VC\include\map(166): kann 'int &amp;std::map&lt;_Kty,_Ty&gt;::operator [](const std::basic_string&lt;_Elem,_Traits,_Ax&gt; &amp;)' sein<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Kty=std::string,<br />
1&gt; _Ty=int,<br />
1&gt; _Elem=char,<br />
1&gt; _Traits=std::char_traits&lt;char&gt;,<br />
1&gt; _Ax=std::allocator&lt;char&gt;<br />
1&gt; ]<br />
1&gt; bei Anpassung der Argumentliste '(const std::map&lt;_Kty,_Ty&gt;, const std::string)'<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Kty=std::string,<br />
1&gt; _Ty=int<br />
1&gt; ]</p>
</blockquote>
<p>Naja, ich vermute in der Fehlermeldung steht, was ich falsch mache, ich finde es aber nicht heraus. Ich hätte jetzt ja gedacht, dass es daran liegt, dass ich die Methode const gemacht habe, weisz aber nicht, was ich dann dagegen machen könnte, wenn es so wäre.</p>
<p>Bitte um Hilfe (wen wunderts, sonst hätte ich es nicht hier gepostet) Sollte der Fehler woanders liegen bitte sagen, dann versuche ich es mit etwas mehr code.</p>
<p>PS: in welchem Header befindet sich make_pair?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177952/const-und-operator</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 05:15:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177952.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Apr 2007 16:18:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const und operator [] on Thu, 05 Apr 2007 16:18:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Erstmal der Code:</p>
<pre><code class="language-cpp">int MageTalentBaum::getTalentPoints(const string &amp;talent) const{
	return talents[talent];
}
</code></pre>
<p>talents ist eine std::map<a href="std:.string,int" rel="nofollow">std:.string,int</a>.</p>
<p>Als Fehlermeldung kommt dann:</p>
<blockquote>
<p>.\talentbaum.cpp(89) : error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const std::map&lt;_Kty,_Ty&gt;' akzeptiert (oder keine geeignete Konvertierung möglich)<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Kty=std::string,<br />
1&gt; _Ty=int<br />
1&gt; ]<br />
1&gt; C:\Programme\Microsoft Visual Studio 8\VC\include\map(166): kann 'int &amp;std::map&lt;_Kty,_Ty&gt;::operator [](const std::basic_string&lt;_Elem,_Traits,_Ax&gt; &amp;)' sein<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Kty=std::string,<br />
1&gt; _Ty=int,<br />
1&gt; _Elem=char,<br />
1&gt; _Traits=std::char_traits&lt;char&gt;,<br />
1&gt; _Ax=std::allocator&lt;char&gt;<br />
1&gt; ]<br />
1&gt; bei Anpassung der Argumentliste '(const std::map&lt;_Kty,_Ty&gt;, const std::string)'<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Kty=std::string,<br />
1&gt; _Ty=int<br />
1&gt; ]</p>
</blockquote>
<p>Naja, ich vermute in der Fehlermeldung steht, was ich falsch mache, ich finde es aber nicht heraus. Ich hätte jetzt ja gedacht, dass es daran liegt, dass ich die Methode const gemacht habe, weisz aber nicht, was ich dann dagegen machen könnte, wenn es so wäre.</p>
<p>Bitte um Hilfe (wen wunderts, sonst hätte ich es nicht hier gepostet) Sollte der Fehler woanders liegen bitte sagen, dann versuche ich es mit etwas mehr code.</p>
<p>PS: in welchem Header befindet sich make_pair?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1260253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1260253</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Thu, 05 Apr 2007 16:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to const und operator [] on Thu, 05 Apr 2007 16:25:20 GMT]]></title><description><![CDATA[<p>map::operator[] ist nicht-konstant, weil er die map im Notfall manipulieren muß (er legt ein neues Element an, wenn die Suche nicht geklappt hat). Aber du kannst ja mal map::find() verwenden, um in deinem Baum zu suchen.</p>
<p>Edit: PS: std::pair&lt;&gt; und make_pair() findest du in &lt;utility&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1260257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1260257</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 05 Apr 2007 16:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to const und operator [] on Thu, 05 Apr 2007 16:52:21 GMT]]></title><description><![CDATA[<p>Vielen Dank CStoll, dann hantiere ich eben mit find rum.</p>
<p>Darf ich fragen inwiefern der unter Umständen ein neues Element anlegen muss? Legt der, wenn es das Element nicht gibt, ein neues an??? Dann bräuchte man insert ja gar nicht mehr.</p>
<p>EDIT: achja, sorry wegen der headerfrage, aber irgendwie scheint es den utility Header und seine Inhalte auf <a href="http://www.cppreference.com" rel="nofollow">www.cppreference.com</a> (was ich oft als Quick-Referenz nutze) nicht zu geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1260272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1260272</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Thu, 05 Apr 2007 16:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to const und operator [] on Thu, 05 Apr 2007 17:02:32 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Vielen Dank CStoll, dann hantiere ich eben mit find rum.</p>
<p>Darf ich fragen inwiefern der unter Umständen ein neues Element anlegen muss? Legt der, wenn es das Element nicht gibt, ein neues an??? Dann bräuchte man insert ja gar nicht mehr.</p>
</blockquote>
<p>Ja, wenn du op[] einen Schlüssel gibst, der noch nicht existiert, trägt er ihn neu in die map ein (den Wert dazu holt er sich über den Default-Ctor). Und ja, das kann insert() in gewissen Grenzen ersetzen, macht es aber nicht überflüssig.</p>
<blockquote>
<p>EDIT: achja, sorry wegen der headerfrage, aber irgendwie scheint es den utility Header und seine Inhalte auf <a href="http://www.cppreference.com" rel="nofollow">www.cppreference.com</a> (was ich oft als Quick-Referenz nutze) nicht zu geben.</p>
</blockquote>
<p>Ist vielleicht nicht der richtige Zeitpunkt, aber ich würde dir meine Artikelserie &quot;Aufbau der STL&quot; ans Herz legen (zu finden bei uns im Magazin).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1260277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1260277</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 05 Apr 2007 17:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to const und operator [] on Fri, 06 Apr 2007 09:21:49 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Darf ich fragen inwiefern der unter Umständen ein neues Element anlegen muss? Legt der, wenn es das Element nicht gibt, ein neues an??? Dann bräuchte man insert ja gar nicht mehr.</p>
</blockquote>
<p>map kann nicht zwischen den beiden folgenden Situationen unterscheiden:</p>
<pre><code class="language-cpp">map&lt;string, string&gt;foo;
foo[&quot;a&quot;] = &quot;b&quot;; // wird ein neues Element angelegt
foo[&quot;c&quot;] = &quot;d&quot;;
</code></pre>
<pre><code class="language-cpp">map&lt;string, string&gt;bar;
if(bar[&quot;a&quot;] == &quot;rrr&quot;){
  //...
}
</code></pre>
<p>In der ersten erwartet man dass op[] ein Element hinzufügt und bei der zweiten will man hauptsächlich den Wert testen. Da es sich aber um den gleichen op[] handelt muss er eben in beiden Situationen ein neues Objekt anlegen auch wenn es im zweiten Fall suboptimal ist.</p>
<p>Da der op[]const aber nichts hinzufügen kann (soll) gibt es für ihn kein gescheites Verhalten im Fall wo der Schlüssel nicht in der map enthalten wäre. Eine Ausnahme ist keine Option da sonst das Verhalten vom op[] und vom op[]const sehr verschieden wären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1260495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1260495</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Fri, 06 Apr 2007 09:21:49 GMT</pubDate></item></channel></rss>