<?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[const referenz ?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: Ich möchte eine Klasse schreiben, in der ich große Daten Matrizen (Typ ist myMatI, spielt ja aber eigentlich keine Rolle) bekannt machen will (gVecMap10, gVecMap01). Diese Daten sollen nicht veränderbar sein, aber ich will auch keine Kopien im Speicher anlegen (wegen der Größe). Außerdem sollen diese Daten unter den Pseudonymen gVecMapA und gVecMapB bekannt sein.</p>
<pre><code class="language-cpp">class Klasse
{
  const myMatI&amp; gVecMap10;
  const myMatI&amp; gVecMap01;

  const myMatI&amp; gVecMapA;
  const myMatI&amp; gVecMapB;

  [...]
}
</code></pre>
<p>Diese Pseudonyme sollen auf jeweils auf eine Datenmatrix verweisen, ich möchte aber Situationsbedingt festlegen, welches Pseudonym auf welche Matrix zeigt. Wie oben gezeigt habe ich gedacht das geht am einfachsten mit Referenzen. Nun muss ich ja die Referenzen initialisieren, das habe ich im Constructor wie folgt gemacht.</p>
<pre><code class="language-cpp">Klasse::Klasse(const myMatI&amp;   gVecMap10New,
               const myMatI&amp;   gVecMap01New)
              :gVecMap10(gVecMap10New),
               gVecMap01(gVecMap01New)
               gVecMapA(gVecMap10),
               gVecMapB(gVecMap01){}
</code></pre>
<p>Soweit compiliert es auch. Wenn ich jedoch nun Situationsabhängig zB die Pseudonyme tauschen will, also dass gVecMapA auf gVecMap01 zeigt etc , dann beschwert sich der Compiler.</p>
<pre><code class="language-cpp">void Klasse::Swap()
{
  gVecMapA = gVecMap01;
  gVecMapB = gVecMap10;

  [...]
}
</code></pre>
<p>In member function »void Klass::Swap()«:<br />
Fehler: Die Übergabe von »const myMatI« als »this«-Argument von »myMatI&amp; myMatI::operator=(const myMatI&amp;)« streicht Qualifizierer</p>
<p>Was läuft hier falsch? Ich dachte const myMatI&amp; sorgt dafür, dass die Daten nicht geändert werden können, macht aber nicht die Referenz an sich constant?! Warum funktioniert die Zuweisund dann nicht? Gibt es eine bessere/effizientere Methode als meine?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248181/const-referenz</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 06:14:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248181.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Aug 2009 15:35:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const referenz ? on Thu, 20 Aug 2009 15:35:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: Ich möchte eine Klasse schreiben, in der ich große Daten Matrizen (Typ ist myMatI, spielt ja aber eigentlich keine Rolle) bekannt machen will (gVecMap10, gVecMap01). Diese Daten sollen nicht veränderbar sein, aber ich will auch keine Kopien im Speicher anlegen (wegen der Größe). Außerdem sollen diese Daten unter den Pseudonymen gVecMapA und gVecMapB bekannt sein.</p>
<pre><code class="language-cpp">class Klasse
{
  const myMatI&amp; gVecMap10;
  const myMatI&amp; gVecMap01;

  const myMatI&amp; gVecMapA;
  const myMatI&amp; gVecMapB;

  [...]
}
</code></pre>
<p>Diese Pseudonyme sollen auf jeweils auf eine Datenmatrix verweisen, ich möchte aber Situationsbedingt festlegen, welches Pseudonym auf welche Matrix zeigt. Wie oben gezeigt habe ich gedacht das geht am einfachsten mit Referenzen. Nun muss ich ja die Referenzen initialisieren, das habe ich im Constructor wie folgt gemacht.</p>
<pre><code class="language-cpp">Klasse::Klasse(const myMatI&amp;   gVecMap10New,
               const myMatI&amp;   gVecMap01New)
              :gVecMap10(gVecMap10New),
               gVecMap01(gVecMap01New)
               gVecMapA(gVecMap10),
               gVecMapB(gVecMap01){}
</code></pre>
<p>Soweit compiliert es auch. Wenn ich jedoch nun Situationsabhängig zB die Pseudonyme tauschen will, also dass gVecMapA auf gVecMap01 zeigt etc , dann beschwert sich der Compiler.</p>
<pre><code class="language-cpp">void Klasse::Swap()
{
  gVecMapA = gVecMap01;
  gVecMapB = gVecMap10;

  [...]
}
</code></pre>
<p>In member function »void Klass::Swap()«:<br />
Fehler: Die Übergabe von »const myMatI« als »this«-Argument von »myMatI&amp; myMatI::operator=(const myMatI&amp;)« streicht Qualifizierer</p>
<p>Was läuft hier falsch? Ich dachte const myMatI&amp; sorgt dafür, dass die Daten nicht geändert werden können, macht aber nicht die Referenz an sich constant?! Warum funktioniert die Zuweisund dann nicht? Gibt es eine bessere/effizientere Methode als meine?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764241</guid><dc:creator><![CDATA[Zebro]]></dc:creator><pubDate>Thu, 20 Aug 2009 15:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to const referenz ? on Thu, 20 Aug 2009 15:40:34 GMT]]></title><description><![CDATA[<p>Referenzen sind per Definition konstant. Du kannst also nicht nachträglich ändern, worauf sie zeigen. Für diesen Fall gibt es Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764245</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 20 Aug 2009 15:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to const referenz ? on Thu, 20 Aug 2009 17:11:58 GMT]]></title><description><![CDATA[<p>Vielen Dank ... diese Information hat mir gefehlt. Ich probiere es nun mit Pointern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764274</guid><dc:creator><![CDATA[Zebro]]></dc:creator><pubDate>Thu, 20 Aug 2009 17:11:58 GMT</pubDate></item></channel></rss>