<?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[[]-Operator überladen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion, die Daten aus einer Datei in eine map einliest.<br />
Jetzt möchte ich den []-Operator überladen, so dass bei jedem Schlüssel überprüft wird, ob er vorhanden ist und falls nicht, eine Fehlermeldung ausgegeben wird.</p>
<p>Ich hab das jetzt schon mal versucht, nur leider funktioniert es überhaupt nicht.<br />
Ich weiß jetzt leider auch überhaupt nicht, woran es liegt... Vielleicht könnt Ihr mir da ja weiterhelfen?</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
using namespace std;

class test {

public:
    test(){}; // Constructor
    ~test(){}; // Destructor

    template&lt;class T&gt;
    bool read(map&lt;string, T&gt; &amp;data) {
        ifstream IN (&quot;test.txt&quot;);
        if (IN.is_open()) {
            string line;
            while (getline(IN, line)) {
                stringstream sstr;
                string key;
                T value;
                sstr &lt;&lt; line;
                sstr &gt;&gt; key &gt;&gt; value;
                data[key] = value;
            }
            IN.close();
            return true;
        } else {
            cout&lt;&lt;&quot;ERROR\n&quot;;
            return false;
        }
    }

    template&lt;class T&gt;
    T &amp;operator[](const string key) {
        if (data.find(key) == data.end()) {
            cerr&lt;&lt;&quot;# Invalid key, please check &quot;&lt;&lt;key&lt;&lt;&quot;!&quot;&lt;&lt;endl;
            cerr&lt;&lt;&quot;# Program terminated!&quot;&lt;&lt;endl;
            exit(1);
        }
        return data[key];
    }

};
</code></pre>
<pre><code class="language-cpp">#include &quot;test.h&quot;

#include &lt;iostream&gt;
using namespace std;

int main() {
    test bsp;
    map&lt;string,double&gt; dataD;
    bsp.read(dataD);

    double abc = dataD[&quot;ABC&quot;];
    double def = dataD[&quot;DEF&quot;];
    double ghi = dataD[&quot;GHI&quot;];

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/206321/operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 07:55:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206321.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Feb 2008 14:49:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to []-Operator überladen? on Sat, 23 Feb 2008 14:49:20 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion, die Daten aus einer Datei in eine map einliest.<br />
Jetzt möchte ich den []-Operator überladen, so dass bei jedem Schlüssel überprüft wird, ob er vorhanden ist und falls nicht, eine Fehlermeldung ausgegeben wird.</p>
<p>Ich hab das jetzt schon mal versucht, nur leider funktioniert es überhaupt nicht.<br />
Ich weiß jetzt leider auch überhaupt nicht, woran es liegt... Vielleicht könnt Ihr mir da ja weiterhelfen?</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
using namespace std;

class test {

public:
    test(){}; // Constructor
    ~test(){}; // Destructor

    template&lt;class T&gt;
    bool read(map&lt;string, T&gt; &amp;data) {
        ifstream IN (&quot;test.txt&quot;);
        if (IN.is_open()) {
            string line;
            while (getline(IN, line)) {
                stringstream sstr;
                string key;
                T value;
                sstr &lt;&lt; line;
                sstr &gt;&gt; key &gt;&gt; value;
                data[key] = value;
            }
            IN.close();
            return true;
        } else {
            cout&lt;&lt;&quot;ERROR\n&quot;;
            return false;
        }
    }

    template&lt;class T&gt;
    T &amp;operator[](const string key) {
        if (data.find(key) == data.end()) {
            cerr&lt;&lt;&quot;# Invalid key, please check &quot;&lt;&lt;key&lt;&lt;&quot;!&quot;&lt;&lt;endl;
            cerr&lt;&lt;&quot;# Program terminated!&quot;&lt;&lt;endl;
            exit(1);
        }
        return data[key];
    }

};
</code></pre>
<pre><code class="language-cpp">#include &quot;test.h&quot;

#include &lt;iostream&gt;
using namespace std;

int main() {
    test bsp;
    map&lt;string,double&gt; dataD;
    bsp.read(dataD);

    double abc = dataD[&quot;ABC&quot;];
    double def = dataD[&quot;DEF&quot;];
    double ghi = dataD[&quot;GHI&quot;];

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1461544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461544</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Sat, 23 Feb 2008 14:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to []-Operator überladen? on Sat, 23 Feb 2008 15:23:38 GMT]]></title><description><![CDATA[<p>Funktioniert nicht ist keine Aussage.</p>
<p>Lässt es sich kompilieren? Wenn ja, was funktioniert dann genau nicht?</p>
<p>Wenn nein, zeit die Fehlermeldung. Am besten eingeschränkt auf den Ort, wo du den Fehler vermutest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461561</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 23 Feb 2008 15:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to []-Operator überladen? on Sat, 23 Feb 2008 15:28:51 GMT]]></title><description><![CDATA[<p>Kompilieren lässt es sich schon.</p>
<p>Meine Datei sieht bspw. so aus:</p>
<pre><code>ABC 1.23
DEF 4.56
GHI 7.89
</code></pre>
<p>Wenn ich jetzt z.B. nach dem Schlüssel &quot;JKL&quot; suche, dann sollte ja die Fehlermeldung erscheinen und das Programm abbrechen, weil es diesen Schlüssel nicht gibt.<br />
Passiert aber nicht. Es läuft ganz normal weiter und setzt für den Wert mit dem Schlüssel &quot;JKL&quot; einfach 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461563</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Sat, 23 Feb 2008 15:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to []-Operator überladen? on Sat, 23 Feb 2008 15:31:06 GMT]]></title><description><![CDATA[<p>Selbst wenn es korrekt übersetzte, wird das Programm nicht wie gewünscht laufen. LadyM, du solltest dich in die Klassen-Thematik prinzipiell ein paar Stunden einlesen und es an &quot;einfacheren&quot; Aufgaben versuchen.</p>
<p>Was du hier versucht hast, ist ein paar Funktionen aus einem Deiner vorherigen Forum-Threads[1] zu nehmen und <em>class { ... };</em> drum herum zu schreiben. Wenn es funktionierte, dann ist die Klasse 'test' nur ein entarteter Namensraum.</p>
<p>Grüße... Heiko<br />
---<br />
[1]: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-205837.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-205837.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461565</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Sat, 23 Feb 2008 15:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to []-Operator überladen? on Sat, 23 Feb 2008 15:37:14 GMT]]></title><description><![CDATA[<p>Was du da überladen hast, ist nicht die Klasse map, sondern deine Klasse test.</p>
<pre><code class="language-cpp">dataD[&quot;ABC&quot;];
</code></pre>
<p>Ist ja vom Typ std::map&lt;std::string, double&gt; und da ist der [] - Operator nicht überladen. Wenn du nämlich gedubuggt hättest, hättest du das gesehen, dass nicht deine Funktion aufgerufen wird, sondern die vom der STL...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461566</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 23 Feb 2008 15:37:14 GMT</pubDate></item></channel></rss>