<?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[Referenzen und Konstruktoren]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Ich habe ein Problem mit einer Referenz.</p>
<p>Ich habe in einer Klasse eine Referenz auf eine weitere Klasse als Eigenschaft:</p>
<pre><code class="language-cpp">cEnemy&amp; AimedEnemy;
</code></pre>
<p>Der Konstruktor der betroffenen Klasse sieht so aus:</p>
<pre><code class="language-cpp">cBullet::cBullet(double X, double Y, double AimX, double AimY, double Damage, cEnemy&amp; Aim): AimedEnemy( Aim )
{
...
</code></pre>
<p>Zur Information:<br />
Innerhalb des Konstruktors wird AimedEnemy nichts zugewiesen und es wird auch nicht verwendet, falls so der auftretende Fehler verursacht wird.</p>
<p>Diesen Konstruktor rufe ich in einer For Schleife genau einmal so auf:</p>
<pre><code class="language-cpp">cBullet tempBullet( iX * 2.0 / Map.iXCount - 1.0 + 1.0 / Map.iXCount,
                    iY * 2.0 / Map.iYCount - 1.0 + 1.0 / Map.iYCount,
                    Map.vEnemies[i].dX + 1.0 / Map.iXCount,
                    Map.vEnemies[i].dY + 1.0 / Map.iYCount,
                    dDamage,
                    Map.vEnemies[i]);
                    vBullets.push_back(tempBullet);
                    return 0;
</code></pre>
<p>Die betroffene Funktion ist eine int Funktion. Aber ich glaube nicht, dass das hier etwas zur Sache tut.</p>
<p>Beim Kompilieren (Entwicklungsumgebung Code::Blocks, Compiler GNU GCC Compiler, falls das wichtig ist) erhalte ich folgenden Fehler:</p>
<blockquote>
<p>F:\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\vector.tcc|238|error: non-static reference member `cEnemy&amp;cBullet::AimedEnemy', can't use default assignment operator|</p>
</blockquote>
<p>Wo liegt hier mein Fehler? Ich werde aus dem Error, bzw. über Google und andere Suchmaschinen leider nicht schlau.</p>
<p>Sollte ich bestimmte, möglicherweise wichtige Code-Teile vergessen haben, bitte zögert nicht diese zu fordern.</p>
<p>Vielen Dank im Voraus für eure Hilfe.</p>
<p>MfG Magellan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264657/referenzen-und-konstruktoren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 13:20:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264657.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Apr 2010 18:45:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 18:45:40 GMT]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Ich habe ein Problem mit einer Referenz.</p>
<p>Ich habe in einer Klasse eine Referenz auf eine weitere Klasse als Eigenschaft:</p>
<pre><code class="language-cpp">cEnemy&amp; AimedEnemy;
</code></pre>
<p>Der Konstruktor der betroffenen Klasse sieht so aus:</p>
<pre><code class="language-cpp">cBullet::cBullet(double X, double Y, double AimX, double AimY, double Damage, cEnemy&amp; Aim): AimedEnemy( Aim )
{
...
</code></pre>
<p>Zur Information:<br />
Innerhalb des Konstruktors wird AimedEnemy nichts zugewiesen und es wird auch nicht verwendet, falls so der auftretende Fehler verursacht wird.</p>
<p>Diesen Konstruktor rufe ich in einer For Schleife genau einmal so auf:</p>
<pre><code class="language-cpp">cBullet tempBullet( iX * 2.0 / Map.iXCount - 1.0 + 1.0 / Map.iXCount,
                    iY * 2.0 / Map.iYCount - 1.0 + 1.0 / Map.iYCount,
                    Map.vEnemies[i].dX + 1.0 / Map.iXCount,
                    Map.vEnemies[i].dY + 1.0 / Map.iYCount,
                    dDamage,
                    Map.vEnemies[i]);
                    vBullets.push_back(tempBullet);
                    return 0;
</code></pre>
<p>Die betroffene Funktion ist eine int Funktion. Aber ich glaube nicht, dass das hier etwas zur Sache tut.</p>
<p>Beim Kompilieren (Entwicklungsumgebung Code::Blocks, Compiler GNU GCC Compiler, falls das wichtig ist) erhalte ich folgenden Fehler:</p>
<blockquote>
<p>F:\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\vector.tcc|238|error: non-static reference member `cEnemy&amp;cBullet::AimedEnemy', can't use default assignment operator|</p>
</blockquote>
<p>Wo liegt hier mein Fehler? Ich werde aus dem Error, bzw. über Google und andere Suchmaschinen leider nicht schlau.</p>
<p>Sollte ich bestimmte, möglicherweise wichtige Code-Teile vergessen haben, bitte zögert nicht diese zu fordern.</p>
<p>Vielen Dank im Voraus für eure Hilfe.</p>
<p>MfG Magellan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880714</guid><dc:creator><![CDATA[Magellan]]></dc:creator><pubDate>Sat, 10 Apr 2010 18:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 18:57:32 GMT]]></title><description><![CDATA[<p>Der Teil, wo du einen std::vector&lt;cBullet&gt; erstellst, wäre gut zu kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880719</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 10 Apr 2010 18:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 19:00:53 GMT]]></title><description><![CDATA[<p>Hallo und danke für deine Antwort.</p>
<p>Ganz oben verwende ich :</p>
<pre><code class="language-cpp">using namespace std;
</code></pre>
<p>und die Funktion mit dem tempBullet ist die Funktion einer Klasse namens cTower, diese hat auch einen Member:</p>
<pre><code class="language-cpp">vector &lt; cBullet &gt; vBullets;
</code></pre>
<p>Danke nochmal im Voraus</p>
<p>MfG Magellan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880720</guid><dc:creator><![CDATA[Magellan]]></dc:creator><pubDate>Sat, 10 Apr 2010 19:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 19:07:37 GMT]]></title><description><![CDATA[<p>std::vector setzt voraus, dass die verwendete Klasse einen Default-Ctor und einen operator= hat, das ist bei dir scheinbar nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880723</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 10 Apr 2010 19:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 19:14:19 GMT]]></title><description><![CDATA[<p>Okay, ich seh das Problem. Folgendes Minimalbeispiel:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

class A {
public:
  A(int &amp;x) : x(x) { }

private:
  int &amp;x;
};

int main() {
  int x = 2;
  std::vector&lt;A&gt; v;

  v.push_back(A(x)); // Fehler hier.
}
</code></pre>
<p>Da A einen Referenzmember hat, kann der Compiler keinen Zuweisungsoperator (operator=) für dich erstellen, und da std::vector einen Werttyp braucht, der das Assignable-Konzept erfüllt (also einen solchen Operator hat, siehe 23.1 (3) im Standard), fliegt das ganze auseinander.</p>
<p>Nimm statt der Referenz halt einen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880727</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 10 Apr 2010 19:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 19:43:29 GMT]]></title><description><![CDATA[<p>Danke, aber wenn ich einen Zeiger verwende, also</p>
<pre><code class="language-cpp">cEnemy* AimedEnemy;
</code></pre>
<p>statt</p>
<pre><code class="language-cpp">cEnemy&amp; AimedEnemy;
</code></pre>
<p>usw.</p>
<p>dann erhalte ich bei</p>
<pre><code class="language-cpp">AimedEnemy.dLife -= dDamage;
</code></pre>
<p>den Fehler</p>
<blockquote>
<p>...\main.cpp|407|error: request for member `dLife' in `((cBullet*)this)-&gt;cBullet::AimedEnemy', which is of non-class type `cEnemy*'|</p>
</blockquote>
<p>Das geschieht in einer Funktion von cBullet. dDamage ist eine Eingenschaft von cBullet.</p>
<p>Zur Information sollte ich aber auch sagen, dass ich zum erstem Mal mit Zeigern arbeite, weil ich gehört/gelesen habe, dass das keine besonders gute Arbeitsweise wäre...</p>
<p>Danke nochmal</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880741</guid><dc:creator><![CDATA[Magellan]]></dc:creator><pubDate>Sat, 10 Apr 2010 19:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 19:50:28 GMT]]></title><description><![CDATA[<p>...</p>
<pre><code class="language-cpp">AimedEnemy-&gt;dLife
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1880746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880746</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 10 Apr 2010 19:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 19:51:39 GMT]]></title><description><![CDATA[<p>...</p>
<pre><code class="language-cpp">(*AimedEnemy).dLife
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1880747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880747</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Sat, 10 Apr 2010 19:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sat, 10 Apr 2010 20:02:25 GMT]]></title><description><![CDATA[<p>Danke, mit beiden Varianten lässt sich das Projekt kompilieren.</p>
<p>Allerdings stürzt das Programm ab, egal welche der beiden Varianten ich verwende...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880752</guid><dc:creator><![CDATA[Magellan]]></dc:creator><pubDate>Sat, 10 Apr 2010 20:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sun, 11 Apr 2010 12:05:30 GMT]]></title><description><![CDATA[<p>Wie genau stürzt es ab?</p>
<p>Überprüf doch (z.B. mit dem Debugger), ob der Zeiger <code>AimedEnemy</code> gültig ist. Hast du ihn initialisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881004</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Apr 2010 12:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sun, 11 Apr 2010 15:10:41 GMT]]></title><description><![CDATA[<p>Hallo, bei</p>
<pre><code class="language-cpp">*AimedEnemy = Aim;
</code></pre>
<p>stürzt er ab.</p>
<p>Wenn ich in die Zeile davor</p>
<pre><code class="language-cpp">exit(0);
</code></pre>
<p>schreib beendet sichs korrekt.</p>
<p>In der Zeile danach, wird exit nicht erreicht.</p>
<blockquote>
<p>ogl_c.exe funktioniert nicht mehr</p>
</blockquote>
<p>Der Debugger sagt mir:</p>
<blockquote>
<p>Process returned -1073741819 (0xC0000005)</p>
</blockquote>
<p>Vielen Dank schonmal für deine Hilfe.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881105</guid><dc:creator><![CDATA[Magellan]]></dc:creator><pubDate>Sun, 11 Apr 2010 15:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Sun, 11 Apr 2010 15:40:45 GMT]]></title><description><![CDATA[<p>AimedEnemy scheint nicht gültig zu sein. Wo initialisierst du die Variable denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881122</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 11 Apr 2010 15:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Mon, 12 Apr 2010 11:50:08 GMT]]></title><description><![CDATA[<p>Magellan schrieb:</p>
<blockquote>
<p>Hallo, bei</p>
<pre><code class="language-cpp">*AimedEnemy = Aim;
</code></pre>
<p>stürzt er ab.</p>
</blockquote>
<pre><code class="language-cpp">AimedEnemy = &amp;Aim;
</code></pre>
<p><code>*AimedEnemy = Aim</code> würde voraussetzen dass <code>AimedEnemy</code> vorher schon auf ein gültiges Objekt zeigt, und würde dann den Wert kopieren (operator = aufrufen), und nicht den Zeiger &quot;verbiegen&quot;.<br />
Da <code>AimedEnemy</code> vermutlich zu dem Zeitpunkt wo du das aufrufst <em>nicht</em> auf ein gültiges Objekt zeigt, crasht es eben.</p>
<p>BTW: ich glaube &quot;aimed&quot; ist falsch in dem Zusammenhang (die Waffe ist &quot;aimed&quot; auf das Ziel, aber auf das Ziel kann man das Wort &quot;aimed&quot; glaube ich nicht anwenden). Ich bin mir nicht sicher, aber ich denke &quot;targeted&quot; könnte das richtige Wort sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881510</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 12 Apr 2010 11:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Mon, 12 Apr 2010 13:26:59 GMT]]></title><description><![CDATA[<p>Vielen Dank hustbaer!</p>
<p>Damit funktioniert es. Und auch danke für die hilfreiche Erklärung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>PS:<br />
Auch danke für dein BTW. Werd ich mir nochmal überlegen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>MfG, und nochmal danke an alle</p>
<p>Magellan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881594</guid><dc:creator><![CDATA[Magellan]]></dc:creator><pubDate>Mon, 12 Apr 2010 13:26:59 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Mon, 12 Apr 2010 13:29:35 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>BTW: ich glaube &quot;aimed&quot; ist falsch in dem Zusammenhang (die Waffe ist &quot;aimed&quot; auf das Ziel, aber auf das Ziel kann man das Wort &quot;aimed&quot; glaube ich nicht anwenden). Ich bin mir nicht sicher, aber ich denke &quot;targeted&quot; könnte das richtige Wort sein.</p>
</blockquote>
<p>Target könnte auch reichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> targeted heißt auch wieder &quot;auf jmd/etw gerichtet&quot;, wäre also wieder die Waffe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881595</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 12 Apr 2010 13:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen und Konstruktoren on Mon, 12 Apr 2010 16:07:57 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>BTW: ich glaube &quot;aimed&quot; ist falsch in dem Zusammenhang (die Waffe ist &quot;aimed&quot; auf das Ziel, aber auf das Ziel kann man das Wort &quot;aimed&quot; glaube ich nicht anwenden). Ich bin mir nicht sicher, aber ich denke &quot;targeted&quot; könnte das richtige Wort sein.</p>
</blockquote>
<p>Target könnte auch reichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> targeted heißt auch wieder &quot;auf jmd/etw gerichtet&quot;, wäre also wieder die Waffe...</p>
</blockquote>
<p>Ja, Target würde reichen.</p>
<p>Ich glaube targeted geht für beides, es gibt auf jeden Fall &quot;targeted by&quot;, also &quot;to be targeted by someone&quot; im Sinne von &quot;von jemandem anvisiert werden&quot;.</p>
<p>&quot;to be aimed by someone&quot; gibt's auch, aber das bedeutet &quot;von jemandem (auf ein Ziel) ausgerichtet werden&quot;, und nicht &quot;von jemandem anvisiert werden&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881664</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 12 Apr 2010 16:07:57 GMT</pubDate></item></channel></rss>