<?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[Zugriff auf map&amp;lt;std::string, TemplateClass&amp;lt;...&amp;gt;&amp;gt;]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe eine Frage bzgl. dieser Thematik: Es gibt eine Klasse, Eine TemplateKlasse, eine map und den Versuch, darauf zuzugreifen und den Inhalt zurückzugeben.</p>
<pre><code class="language-cpp">// definition of class
class Klasse
{
};

// definition of template class
template &lt;class T&gt;
class TKlasse
{
};

// declaration of map
std::map&lt;std::string, TKlasse&lt;const Klasse&gt;&gt; m_klasse;

// definition of member function
TKlasse&lt;const Klasse&gt; GetKlasse(const std::string&amp; klasse_id) const
{
return m_klasse[klasse_id];
}
</code></pre>
<p>Ich bekomme nun die Meldung, dass kein []-Operator mit diesem Operanden übereinstimmt. Ich denke, dass der Zugriff so grundsätzlich funktioniert. Muss ich den []-Operator im Fall von Templates selber schreiben?</p>
<p>Danke für die Hilfe!</p>
<p>p.s. Nachtrag: So funktioniert es, ich weiss einfach nicht ganz wieso. Wäre froh, wenn mich da ein Pro aufklären kann.</p>
<pre><code class="language-cpp">// definition get method
template&lt;class T&gt;
const T&amp; Get(const std::map&lt;std::string, T&gt;&amp; m, const std::string&amp; k)
{
typename std::map&lt;std::string, T&gt;::const_iterator it=m.find(k);
return it-&gt;second;
}

// definition of member function
TKlasse&lt;const Klasse&gt; GetKlasse(const std::string&amp; klasse_id) const
{
// knows about m_klasse because it is a member function
return Get(m_klasse, klasse_id);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/301131/zugriff-auf-map-lt-std-string-templateclass-lt-gt-gt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 08:35:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301131.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Mar 2012 09:48:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriff auf map&amp;lt;std::string, TemplateClass&amp;lt;...&amp;gt;&amp;gt; on Tue, 20 Mar 2012 10:05:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe eine Frage bzgl. dieser Thematik: Es gibt eine Klasse, Eine TemplateKlasse, eine map und den Versuch, darauf zuzugreifen und den Inhalt zurückzugeben.</p>
<pre><code class="language-cpp">// definition of class
class Klasse
{
};

// definition of template class
template &lt;class T&gt;
class TKlasse
{
};

// declaration of map
std::map&lt;std::string, TKlasse&lt;const Klasse&gt;&gt; m_klasse;

// definition of member function
TKlasse&lt;const Klasse&gt; GetKlasse(const std::string&amp; klasse_id) const
{
return m_klasse[klasse_id];
}
</code></pre>
<p>Ich bekomme nun die Meldung, dass kein []-Operator mit diesem Operanden übereinstimmt. Ich denke, dass der Zugriff so grundsätzlich funktioniert. Muss ich den []-Operator im Fall von Templates selber schreiben?</p>
<p>Danke für die Hilfe!</p>
<p>p.s. Nachtrag: So funktioniert es, ich weiss einfach nicht ganz wieso. Wäre froh, wenn mich da ein Pro aufklären kann.</p>
<pre><code class="language-cpp">// definition get method
template&lt;class T&gt;
const T&amp; Get(const std::map&lt;std::string, T&gt;&amp; m, const std::string&amp; k)
{
typename std::map&lt;std::string, T&gt;::const_iterator it=m.find(k);
return it-&gt;second;
}

// definition of member function
TKlasse&lt;const Klasse&gt; GetKlasse(const std::string&amp; klasse_id) const
{
// knows about m_klasse because it is a member function
return Get(m_klasse, klasse_id);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2193142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193142</guid><dc:creator><![CDATA[mhu]]></dc:creator><pubDate>Tue, 20 Mar 2012 10:05:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf map&amp;lt;std::string, TemplateClass&amp;lt;...&amp;gt;&amp;gt; on Tue, 20 Mar 2012 09:58:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich denke, dass der Zugriff so grundsätzlich funktioniert. Muss ich den []-Operator im Fall von Templates selber schreiben?</p>
</blockquote>
<p>Nein, musst du nicht. Der Zugriff sollte grundsätzlich so funktionieren.<br />
Du hast aber leider weder den originalen Code noch die Fehlermeldung gepostet, daher kann dir nicht wirklich weitergeholfen werden (siehe Link in meiner Signatur)</p>
<p>mhu schrieb:</p>
<blockquote>
<p>Ich bekomme nun die Meldung, dass kein []-Operator mit diesem Operanden übereinstimmt.</p>
</blockquote>
<p>Nein, du bekommst sicherlich mehr als nur die Meldung. Ich bekomme mit deinem Code folgendes:</p>
<pre><code>error: non-member function 'TKlasse&lt;const Klasse&gt; GetKlasse(const std::string&amp;)' cannot have cv-qualifier
</code></pre>
<p>- weil du etwas, was mal eine Methode war, als freie Funktion hingeschrieben hast.<br />
Wenn ich das const entferne, funktionierts.</p>
<p>Ich kann jetzt nur raten:<br />
Ich <em>vermute</em> mal, dass m_klasse ein Attribut einer anderen Klasse ist, und dass GetKlasse eine Methode dieser Klasse ist.<br />
Da GetKlasse aber offenbar const deklariert wurde, kannst du auf m_klasse dann auch nur const Methoden (und Operatoren) aufrufen - das ist bei operator[] aber nicht der Fall.</p>
<p>Aber wie gesagt, alles nur Vermutungen, ohne den echten Code kann man nicht mehr sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193145</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 20 Mar 2012 09:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf map&amp;lt;std::string, TemplateClass&amp;lt;...&amp;gt;&amp;gt; on Tue, 20 Mar 2012 10:17:58 GMT]]></title><description><![CDATA[<p>Ok danke,</p>
<p>Ja stimmt, die map ist ein Feld in einer anderen Klasse. Werde in Zukunft versuchen, lauffähigen Code zu posten, der auf das Problem reduziert. Dann kann ich auch ohne Bedenken die Fehlermeldung posten. Werde da an Präzision zulegen:-) Originalcode geht nicht.</p>
<p>In dem Fall liegts vom Verständnis her daran, dass der Zugriffsoperator für const Objekte nicht passt. Und die Funktion Get erreicht genau dies mit dem const_iterator?</p>
<p>Danke für deine schnelle Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193152</guid><dc:creator><![CDATA[mhu]]></dc:creator><pubDate>Tue, 20 Mar 2012 10:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf map&amp;lt;std::string, TemplateClass&amp;lt;...&amp;gt;&amp;gt; on Tue, 20 Mar 2012 10:25:30 GMT]]></title><description><![CDATA[<p>mhu schrieb:</p>
<blockquote>
<p>TemplateKlasse</p>
</blockquote>
<p>Was ist eine TemplateKlasse? Ist das eine Spezialisierung eines Klassen-Templates? Oder meinst Du damit das Klassen-Template an sich?</p>
<p>(Das war eine rhetorische Frage)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193154</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 20 Mar 2012 10:25:30 GMT</pubDate></item></channel></rss>