<?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[Porblem mit [] Operator]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Problem mit dem Index-Operator:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Array
{
    ...

    T operator[] (unsigned int) const;
    T &amp; operator[] (unsigned int);

    ...
};

class MyType
{
    ...
};

int main()
{
    Array&lt;Array&lt;MyType&gt; &gt; MyObject;
    MyObject[1][2]. ... //Fehler
}
</code></pre>
<p>Der Compiler beschwert sich beid dieser Operation, dass er die Überladung des ersten Arrays nicht auflösen kann.<br />
Gedacht war es eignetlich als mehrdimensionales Array. (Das Array&lt;Array&lt;MyType&gt; &gt; gibt eine Referenz auf ein Array&lt;MyType&gt; Objekt zurück, das dann das MyType Objekt zurückgibt, mit dem ich arbeiten kann.)<br />
Das funktioniert aber leider nicht, da der Compiler nicht weiß, ob er den Konstanten [] Operator nehmen soll, oder nicht. Hier soll er ja den nicht-konstanten nehmen. Ich habe aber auch Operationen, in denen ich ein konstantes Objekt habe, und deshalb nur auf den konstanten [] Operator zugreifen kann.</p>
<p>Wie kann ich dem Compiler sagen, dass er nur den konstanten Operator nehmen soll, wenn er muss, und sonst den nicht-konstanten.</p>
<p>Oder kann ich das Problem besser lösen?</p>
<p>Danke schon mal für eure Posts!</p>
<p>mfG PGroe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147604/porblem-mit-operator</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 14:09:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147604.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 May 2006 14:11:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Porblem mit [] Operator on Thu, 18 May 2006 14:12:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Problem mit dem Index-Operator:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Array
{
    ...

    T operator[] (unsigned int) const;
    T &amp; operator[] (unsigned int);

    ...
};

class MyType
{
    ...
};

int main()
{
    Array&lt;Array&lt;MyType&gt; &gt; MyObject;
    MyObject[1][2]. ... //Fehler
}
</code></pre>
<p>Der Compiler beschwert sich beid dieser Operation, dass er die Überladung des ersten Arrays nicht auflösen kann.<br />
Gedacht war es eignetlich als mehrdimensionales Array. (Das Array&lt;Array&lt;MyType&gt; &gt; gibt eine Referenz auf ein Array&lt;MyType&gt; Objekt zurück, das dann das MyType Objekt zurückgibt, mit dem ich arbeiten kann.)<br />
Das funktioniert aber leider nicht, da der Compiler nicht weiß, ob er den Konstanten [] Operator nehmen soll, oder nicht. Hier soll er ja den nicht-konstanten nehmen. Ich habe aber auch Operationen, in denen ich ein konstantes Objekt habe, und deshalb nur auf den konstanten [] Operator zugreifen kann.</p>
<p>Wie kann ich dem Compiler sagen, dass er nur den konstanten Operator nehmen soll, wenn er muss, und sonst den nicht-konstanten.</p>
<p>Oder kann ich das Problem besser lösen?</p>
<p>Danke schon mal für eure Posts!</p>
<p>mfG PGroe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1060193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1060193</guid><dc:creator><![CDATA[PGroe]]></dc:creator><pubDate>Thu, 18 May 2006 14:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Thu, 18 May 2006 14:49:08 GMT]]></title><description><![CDATA[<p>Hmm, afaik macht der das automatisch. Wie lautet denn die Fehlermeldung?<br />
Übrigens kannst (solltest?) du den konstanten []-Operator eine konstante Referenz, nicht eine Kopie zurückgeben lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1060239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1060239</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 18 May 2006 14:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Thu, 18 May 2006 17:33:07 GMT]]></title><description><![CDATA[<p>PGroe schrieb:</p>
<blockquote>
<p>Das funktioniert aber leider nicht, da der Compiler nicht weiß, ob er den Konstanten [] Operator nehmen soll, oder nicht.</p>
</blockquote>
<p>Doch, der Compiler weiss das schon. Immerhin ist dein Objekt nicht konstant, also wird er auch die non-const Variante des Operators bevorzugen. Dein Fehler liegt an anderer Stelle. Am besten du postest mal die konkrete Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1060371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1060371</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 18 May 2006 17:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Fri, 19 May 2006 14:33:05 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Übrigens kannst (solltest?) du den konstanten []-Operator eine konstante Referenz, nicht eine Kopie zurückgeben lassen.</p>
</blockquote>
<p>Danke! Werde ich machen. Ist ne gute Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061045</guid><dc:creator><![CDATA[PGroe]]></dc:creator><pubDate>Fri, 19 May 2006 14:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Fri, 19 May 2006 14:34:42 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>PGroe schrieb:</p>
<blockquote>
<p>Das funktioniert aber leider nicht, da der Compiler nicht weiß, ob er den Konstanten [] Operator nehmen soll, oder nicht.</p>
</blockquote>
<p>Doch, der Compiler weiss das schon. Immerhin ist dein Objekt nicht konstant, also wird er auch die non-const Variante des Operators bevorzugen. Dein Fehler liegt an anderer Stelle. Am besten du postest mal die konkrete Fehlermeldung.</p>
</blockquote>
<p>Meine Fehlermeldung ist:<br />
d:\dateien\vsp\c++-übungen\aufgabe1.cpp(59): error C2666: 'Array&lt;T&gt;::operator`[]'': 3 Überladungen haben ähnliche Konvertierungen<br />
with<br />
[<br />
T=Array&lt;MyType&gt;<br />
]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061046</guid><dc:creator><![CDATA[PGroe]]></dc:creator><pubDate>Fri, 19 May 2006 14:34:42 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Fri, 19 May 2006 15:07:02 GMT]]></title><description><![CDATA[<p>versuch mal:</p>
<pre><code class="language-cpp">const T &amp;operator[] (unsigned int) const;
T &amp; operator[] (unsigned int);
</code></pre>
<p>Zumindest macht es die STL bei der std::vector template Klasse so...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061069</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Fri, 19 May 2006 15:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Fri, 19 May 2006 16:35:40 GMT]]></title><description><![CDATA[<p>bluecode schrieb:</p>
<blockquote>
<p>versuch mal:</p>
<pre><code class="language-cpp">const T &amp;operator[] (unsigned int) const;
T &amp; operator[] (unsigned int);
</code></pre>
<p>Zumindest macht es die STL bei der std::vector template Klasse so...</p>
</blockquote>
<p>PGroe schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Übrigens kannst (solltest?) du den konstanten []-Operator eine konstante Referenz, nicht eine Kopie zurückgeben lassen.</p>
</blockquote>
<p>Danke! Werde ich machen. Ist ne gute Idee.</p>
</blockquote>
<p>!</p>
<p>3 Überladungen? wieso hast du 3 Überladungen? Kannst du mal den Header zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061137</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 19 May 2006 16:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Fri, 19 May 2006 21:19:00 GMT]]></title><description><![CDATA[<p>Oder zeig einfach nur mal die dritte Überladung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061293</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 19 May 2006 21:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Tue, 23 May 2006 19:32:29 GMT]]></title><description><![CDATA[<p>Die gibt es von Anfang an.</p>
<p>Deshalb heißt es ja auch Operatoren überladen, wenn man den ersten von sich selbst definiert. (D.h. es gibt schon zwei.) Wenn ich dann noch einen Überlade, sind es schon 3: Voilà!</p>
<p>Ich selbst habe nur zwei Überladungen definiert, aber es gibt immer eine standardmäßig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1063789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1063789</guid><dc:creator><![CDATA[PGroe]]></dc:creator><pubDate>Tue, 23 May 2006 19:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Tue, 23 May 2006 19:48:34 GMT]]></title><description><![CDATA[<p>PGroe schrieb:</p>
<blockquote>
<p>Die gibt es von Anfang an.</p>
<p>Deshalb heißt es ja auch Operatoren überladen, wenn man den ersten von sich selbst definiert. (D.h. es gibt schon zwei.) Wenn ich dann noch einen Überlade, sind es schon 3: Voilà!</p>
<p>Ich selbst habe nur zwei Überladungen definiert, aber es gibt immer eine standardmäßig.</p>
</blockquote>
<p>das verstehst du falsch. überladung bezieht sich auf alle parameter - und ddas schließt den objekt-parameter einer memberfunktion ein. operator[] ist nur für pointer und integer eingebaut. vielleicht solltest du mal die fehlermeldung komplett zitieren. üblicherweise zeigt visual c++ alle kandidaten, zwischen denen es sich nicht entscheiden kann, an. die definition der klasse wäre auch hilfreich (op[] kann ja nur als memberfunktion definiert werden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1063800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1063800</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 23 May 2006 19:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to Porblem mit [] Operator on Tue, 23 May 2006 22:28:57 GMT]]></title><description><![CDATA[<p>PGroe schrieb:</p>
<blockquote>
<p>Ich selbst habe nur zwei Überladungen definiert, aber es gibt immer eine standardmäßig.</p>
</blockquote>
<p>Nein, gibt es nicht. Klassen haben nur vier Funktionen/Operatoren implizit: default ctor, copy ctor, dtor und copy op. Und der default ctor auch nur dann, wenn du keinen ctor selbst definiert hast. Alles andere musst du explizit angeben.<br />
Und in deinem Code sind nur zwei op's [] zu sehen, die Fehlermeldung spricht aber von drei. Deshalb muss es noch irgendwo einen dritten op [] geben, der sich in seiner Signatur nicht entscheidend von den beiden anderen unterscheidet. So weist dein Codeschnipsel jedenfalls keinen Fehler auf und lässt sich problemlos kompilieren.<br />
Falls du einen aktuellen MSC verwendest, sollten eigentlich alle drei Überladungen ebenfalls in der Fehlermeldung aufgeführt werden und sich damit direkt im Editorfenster anspringen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1063902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1063902</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 23 May 2006 22:28:57 GMT</pubDate></item></channel></rss>