<?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[]]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgeden Code (vereinfacht):</p>
<p>.h:</p>
<pre><code>class Vector{
private:

  float val[2];

public:

  Vector();

  Vector(const Vector&amp; vec2);

  Vector(float x, float y);

  float&amp; operator[](const int index);
};
</code></pre>
<p>.cpp:</p>
<pre><code>Vector::Vector(){

  this-&gt;val[0] = 0;

  this-&gt;val[1] = 0;

}

Vector::Vector(const Vector&amp; vec2){

  this-&gt;val[0] = vec2[0];

  this-&gt;val[1] = vec2[1];

}

Vector::Vector(float x, float y){

  this-&gt;val[0] = x;

  this-&gt;val[1] = y;

}

float&amp; Vector::operator[](int index){

  return val[index];

}
</code></pre>
<p>Der VC++ Compiler akzeptiert das. Der gcc gibt folgenden Error aus:</p>
<p>&quot;error: passing `const Vector' as `this'<br />
argument of `float&amp; Vector::operator[](int)' discards<br />
qualifiers&quot;</p>
<p>Ich nehme an dass das was mit dem const zu tun hat, wo ja der VC++ nach meinen Erfahrungen prinzipiell etwas toleranter ist. Wie muss denn das Codefragment laut Standard lauten, so dass es der gcc auch versteht?</p>
<p>Danke im Voraus!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/137169/operator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 16:48:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/137169.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Feb 2006 17:22:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator[] on Wed, 15 Feb 2006 17:22:01 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgeden Code (vereinfacht):</p>
<p>.h:</p>
<pre><code>class Vector{
private:

  float val[2];

public:

  Vector();

  Vector(const Vector&amp; vec2);

  Vector(float x, float y);

  float&amp; operator[](const int index);
};
</code></pre>
<p>.cpp:</p>
<pre><code>Vector::Vector(){

  this-&gt;val[0] = 0;

  this-&gt;val[1] = 0;

}

Vector::Vector(const Vector&amp; vec2){

  this-&gt;val[0] = vec2[0];

  this-&gt;val[1] = vec2[1];

}

Vector::Vector(float x, float y){

  this-&gt;val[0] = x;

  this-&gt;val[1] = y;

}

float&amp; Vector::operator[](int index){

  return val[index];

}
</code></pre>
<p>Der VC++ Compiler akzeptiert das. Der gcc gibt folgenden Error aus:</p>
<p>&quot;error: passing `const Vector' as `this'<br />
argument of `float&amp; Vector::operator[](int)' discards<br />
qualifiers&quot;</p>
<p>Ich nehme an dass das was mit dem const zu tun hat, wo ja der VC++ nach meinen Erfahrungen prinzipiell etwas toleranter ist. Wie muss denn das Codefragment laut Standard lauten, so dass es der gcc auch versteht?</p>
<p>Danke im Voraus!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995125</guid><dc:creator><![CDATA[ChrisR]]></dc:creator><pubDate>Wed, 15 Feb 2006 17:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Wed, 15 Feb 2006 17:33:23 GMT]]></title><description><![CDATA[<p>Randfrage: In welchem Zusammenhang wird der Operator aufgerufen?</p>
<p>Womöglich benötigst du noch eine const-Version davon, um den Operator auch mit konstanten Vektoren und temporären Werten aufzurufen:</p>
<pre><code class="language-cpp">float Vektor::operator[](int index) const
{ return val[i]; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/995135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995135</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 17:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Wed, 15 Feb 2006 18:44:50 GMT]]></title><description><![CDATA[<p>Der Operator [] wird im Copy-Konstruktor verwendet.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995184</guid><dc:creator><![CDATA[ChrisR]]></dc:creator><pubDate>Wed, 15 Feb 2006 18:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Wed, 15 Feb 2006 19:10:50 GMT]]></title><description><![CDATA[<p>Füge nen const, wie CStoll es hat, ein und dann passt es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995208</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Wed, 15 Feb 2006 19:10:50 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Thu, 16 Feb 2006 07:13:08 GMT]]></title><description><![CDATA[<p>ChrisR schrieb:</p>
<blockquote>
<p>Der Operator [] wird im Copy-Konstruktor verwendet.</p>
</blockquote>
<p>OK, das hatte ich übersehen. Und dort findest du auch den Grund für die Fehlermeldung - 'vec2' ist konstant und der operator[] ist es nicht (könnte also den this-Vektor verändern).<br />
Btw, an der Stelle brauchst du doch gar nicht das öffentliche Interface von vec2 - wenn du dort die Aufrufe &quot;vec2[..]&quot; ersetzt durch &quot;vec2.val[..]&quot;, klappt das auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/995424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/995424</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Feb 2006 07:13:08 GMT</pubDate></item></channel></rss>