<?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[Compilerfehler durch const??]]></title><description><![CDATA[<p>Folgender Kurzer beispiel Code:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;vector&gt;

class A{

	int &amp;Ai;

public:

	A(int &amp;i) : Ai(i){}

	A&amp; operator=(const A&amp; scr){
	  this-&gt;Ai=scr.Ai;
	  return *this;
	 }

	const int&amp; GetI(){
	  return Ai;
	}

};

class B{

	public:
	std::vector&lt;A&gt; DATA;
	int i;

	B(){
	  DATA.push_back(A(i));
	}

	const A&amp; GetA(){
	  return DATA[0];
	}

};

int _tmain(int argc, _TCHAR* argv[]){

	B o;

	int i=o.GetA().GetI(); // &lt;---- FEHLER

	return 0;
}
</code></pre>
<p>Compiler melde folgenen fehler: error C2662: 'A::GetI': this-Zeiger kann nicht von 'const A' in 'A &amp;' konvertiert werden<br />
1&gt; Durch die Konvertierung gehen Qualifizierer verloren</p>
<p>Muss ich wohl bei GetA da das const weglassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193510/compilerfehler-durch-const</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 02:18:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193510.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Sep 2007 17:04:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:04:36 GMT]]></title><description><![CDATA[<p>Folgender Kurzer beispiel Code:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;vector&gt;

class A{

	int &amp;Ai;

public:

	A(int &amp;i) : Ai(i){}

	A&amp; operator=(const A&amp; scr){
	  this-&gt;Ai=scr.Ai;
	  return *this;
	 }

	const int&amp; GetI(){
	  return Ai;
	}

};

class B{

	public:
	std::vector&lt;A&gt; DATA;
	int i;

	B(){
	  DATA.push_back(A(i));
	}

	const A&amp; GetA(){
	  return DATA[0];
	}

};

int _tmain(int argc, _TCHAR* argv[]){

	B o;

	int i=o.GetA().GetI(); // &lt;---- FEHLER

	return 0;
}
</code></pre>
<p>Compiler melde folgenen fehler: error C2662: 'A::GetI': this-Zeiger kann nicht von 'const A' in 'A &amp;' konvertiert werden<br />
1&gt; Durch die Konvertierung gehen Qualifizierer verloren</p>
<p>Muss ich wohl bei GetA da das const weglassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373293</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:13:52 GMT]]></title><description><![CDATA[<p>Du kannst nur konstante Methdoden auf das A aufrufen, da du via GetA() eine Referenz auf ein konstantes A-Objekt erhältst. da GetI() nicht als const markiert ist, kannst du die Methode nicht aufrufen.</p>
<p>Übrigens: const int&amp; als Rückgabetyp ist wohl eher sinnlos, was soll das bringen? Ich würds so umschreiben:</p>
<pre><code class="language-cpp">int get_i() const {
    return Ai;
}
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373300</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:18:05 GMT]]></title><description><![CDATA[<p>ne hatte ein ähnliches Problem, da war i ein Objekt ... deswgen das &amp; ! Dachte vll. das es an der ref. liegen könnte.. danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373303</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:35:44 GMT]]></title><description><![CDATA[<p>noch was, wieso fordert der compiler den zuweisungoperatir von A, wenn er nich mal verwendet wird?</p>
<pre><code class="language-cpp">A&amp; operator=(const A&amp; scr){
      this-&gt;Ai=scr.Ai;
      return *this;
     }
</code></pre>
<p>hab das immer noch net verstanden, hat was mit dem vector zu tun</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373316</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:38:14 GMT]]></title><description><![CDATA[<p>CopyCTor, DTor und op= liefert der Compiler wenn du keinen der drei implementierst. Die Regel der großen Drei empfiehlt dir innigst bei Implementierung einer der Drei auch unbedingt die anderen Beiden zu implementieren. std::vector benötigt diese (speziellen) Methoden.</p>
<p>=&gt; Warum implementierst du eine der Drei? Warum verzichtest du auf die anderen Beiden?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373317</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:41:43 GMT]]></title><description><![CDATA[<p>A genügt allerdings auch nicht den Containervoraussetzungen.<br />
Dies sind unter anderem CopyConstructible und Assignable.<br />
Zwar kann A kopiert und zugewiesen werden, aber das Ergebnis ist nicht jeweils das gleiche Äquivalent des Arguments (das wäre evtl. anders, wenn GetI keine Referenz liefern würde). Oft genug beruhen nicht-statische Referenzmember, ebenso wie konstante member, auf einem Denkfehler und sind den damit verbundenen Ärger im allgemeinen nicht wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373318</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:44:26 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>Übrigens: const int&amp; als Rückgabetyp ist wohl eher sinnlos, was soll das bringen?</p>
</blockquote>
<p>ist nicht sinnlos. ohne const könntest du das kompillieren:</p>
<pre><code class="language-cpp">my_object.get_i() = 40;
</code></pre>
<p>mit const beim rückgabewert führt sowas zu einem compilerfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373322</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:47:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Warum ist A nicht CopyConstructable und Assignable? (Wenn der op= nicht implementiert sein würde)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a>: Nicht &quot;int&amp;&quot; sondern &quot;int&quot; statt &quot;const int&amp;&quot;. Das liefert dann:</p>
<pre><code>error C2106: '=': Linker Operand muss ein L-Wert sein
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373325</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:47:18 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:51:37 GMT]]></title><description><![CDATA[<p>jo, ich meinte ja auch int.</p>
<pre><code class="language-cpp">const int get_i() const {
    return Ai;
}
</code></pre>
<p>das meinte ich. hab mich leider ziemlich blöd ausgedrückt^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373329</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 17:54:35 GMT]]></title><description><![CDATA[<p>Da kannst du aber auch int statt const int schreiben, liefert ebenfalls einen Compilerfehler. Siehe oben.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373330</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 18:05:23 GMT]]></title><description><![CDATA[<pre><code>20.1.3
Table 30 CopyConstructible requirements

expression  return type  requirement
T(t)                     t is equivalent to T(t)
T(u)                     u is equivalent to T(u)
t.˜T()
&amp;t          T*           denotes the addrss of t
&amp;u          const T*     denotes the address of u

23.1/4
Table 64 Assignable requirements

expression  return type  post condition
t=u         T&amp;           t is equivalent to u
</code></pre>
<p>(t ist ein Objekt vom Typ T, u ein Objekt vom Typ const T)<br />
Der Standard definiert meines Wissens nicht, was genau Äquivalenz hier bedeuten soll - zweifellos soll diese Bedeutung aber in beiden Fällen gleich sein.<br />
Ein implizit deklarierter Zuweisungsoperator kann nicht definiert werden, wenn die Klasse einen Referenzmember hat - damit würde A dann von vornherein das Assignable-Kriterium nicht erfüllen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373338</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 26 Sep 2007 18:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 18:06:28 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>Da kannst du aber auch int statt const int schreiben, liefert ebenfalls einen Compilerfehler. Siehe oben.</p>
</blockquote>
<p>stimmt sry, war grad ein bisschen verwirrt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373340</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 26 Sep 2007 18:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 18:16:59 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Oft genug beruhen nicht-statische Referenzmember, ebenso wie konstante member, auf einem Denkfehler und sind den damit verbundenen Ärger im allgemeinen nicht wert.</p>
</blockquote>
<p>Ich habe es eher öfter erlebt dass Leute eine Klasse schreiben die eigentlich noncopyable sein müsste, diese aber kopierbar machen (oder lassen, wenn der Compiler alles nötige erzeugen kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373350</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 26 Sep 2007 18:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Wed, 26 Sep 2007 18:45:37 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Oft genug beruhen nicht-statische Referenzmember, ebenso wie konstante member, auf einem Denkfehler und sind den damit verbundenen Ärger im allgemeinen nicht wert.</p>
</blockquote>
<p>Ich habe es eher öfter erlebt dass Leute eine Klasse schreiben die eigentlich noncopyable sein müsste, diese aber kopierbar machen (oder lassen, wenn der Compiler alles nötige erzeugen kann).</p>
</blockquote>
<p>Allerdings hat das Eine mit dem Anderen wenig zu tun. Klassen kopierbar zu machen, die es nicht sein sollten, ist zweifellos ein Fehler - andererseits sind genannte Member nicht in der Lage, Kopierbarkeit zu verhindern - folglich auch nicht das Mittel der Wahl dafür. Insofern entgeht mir, worauf du hinaus willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373366</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 26 Sep 2007 18:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Thu, 27 Sep 2007 03:15:19 GMT]]></title><description><![CDATA[<p>Geil, das wusste ich gar nich:</p>
<pre><code class="language-cpp">int &amp;PropertyI(){

return iA;

}
</code></pre>
<p>jetzt kann ich iA lesen und iA schreiben, brauche keien getrennten Get/SEt methoden , weil es sich wie das Propertymethode in VB verhält:)</p>
<pre><code class="language-cpp">A obj;

int g= obj.PropertyI();

obj.PropertyI(); = 7;
</code></pre>
<p>Mann lernt nie aus, dachte sowas gwürd nich gehen;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373521</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 27 Sep 2007 03:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler durch const?? on Thu, 27 Sep 2007 05:42:55 GMT]]></title><description><![CDATA[<p>Sowas würde ich lieber lassen - damit wirfst du die Zugriffsbeschränkungen durch private etc direkt über den Haufen (das hat den selben Effekt, als würdest du iA direkt public setzen, nur der Schreibaufwand für die Beteiligten wird etwas höher).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373531</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 05:42:55 GMT</pubDate></item></channel></rss>