<?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[Variablen in Klassen]]></title><description><![CDATA[<p>Ich habe eine Klasse:</p>
<pre><code class="language-cpp">class Klasse
{
  private:
    std::vector&lt;int&gt; Liste;
  public:
    void Anhaengen(int Was);
    void Entfernen(int Was);
}Element;

void Klasse::Anhaengen(int Was)
{
  ShowMessage(Liste.size());
  Liste.push_back(Was);
  ShowMessage(Liste.size());
}

void Klasse::Entfernen(int Was)
{
  ShowMessage(Liste.size());
  Liste.erase(&amp;Liste[Was]);
}
</code></pre>
<p>Die ShowMessages sind zur Kontrolle.<br />
Wenn ich nun z.B.: Element.Anhaengen(5) aufrufe bekomme ich die MessageBoxen 0 und 1. Das ist ja wie erwartet.<br />
Wenn ich nun danach Element.Entfernen(0) aufrufe bekommen ich die MessageBox 0 und eine Zugriffsverletzung, weil die Liste ja leer ist.</p>
<p>Warum leert sich die Liste bzw. warum verschwindet Liste[0]???</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/123989/variablen-in-klassen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 16:07:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123989.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Oct 2005 09:20:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 09:20:33 GMT]]></title><description><![CDATA[<p>Ich habe eine Klasse:</p>
<pre><code class="language-cpp">class Klasse
{
  private:
    std::vector&lt;int&gt; Liste;
  public:
    void Anhaengen(int Was);
    void Entfernen(int Was);
}Element;

void Klasse::Anhaengen(int Was)
{
  ShowMessage(Liste.size());
  Liste.push_back(Was);
  ShowMessage(Liste.size());
}

void Klasse::Entfernen(int Was)
{
  ShowMessage(Liste.size());
  Liste.erase(&amp;Liste[Was]);
}
</code></pre>
<p>Die ShowMessages sind zur Kontrolle.<br />
Wenn ich nun z.B.: Element.Anhaengen(5) aufrufe bekomme ich die MessageBoxen 0 und 1. Das ist ja wie erwartet.<br />
Wenn ich nun danach Element.Entfernen(0) aufrufe bekommen ich die MessageBox 0 und eine Zugriffsverletzung, weil die Liste ja leer ist.</p>
<p>Warum leert sich die Liste bzw. warum verschwindet Liste[0]???</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898506</guid><dc:creator><![CDATA[Rich2402]]></dc:creator><pubDate>Sat, 22 Oct 2005 09:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 09:26:36 GMT]]></title><description><![CDATA[<p>Hast du eventuell zwischen den beiden Aufrufen noch etwas mit der Liste gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898512</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 22 Oct 2005 09:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 09:53:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Wenn ich nun danach Element.Entfernen(0) aufrufe bekommen ich die MessageBox 0 und eine Zugriffsverletzung, weil die Liste ja leer ist.</p>
</blockquote>
<p>Nein du bekommst eine Zugriffsverletzung weil du an <em>erase</em> irgend eine Adresse übergibst aber keinen gültigen Iterator.<br />
Wes willst du denn in <em>Entfernen</em> löschen? Das Element mit dem index <em>Was</em> oder das (die Element(e) mit dem Wert <em>Was</em>?</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898532</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 22 Oct 2005 09:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 10:21:38 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>wenn es um das Element mit dem Index Was geht, das geht so :</p>
<pre><code class="language-cpp">void Klasse::Entfernen(int Was)
{
  Liste.erase(Liste.begin() + Was);
  }
</code></pre>
<p>Eventuell solltest du aber noch prüfen, ob <em>Was</em> kleine ist als <em>Liste.size()</em>.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898550</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 22 Oct 2005 10:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 12:17:51 GMT]]></title><description><![CDATA[<p>Mag sein, danke das mit erase hat bisher so geklappt... Das ist ja auch nur ein Bsp.</p>
<p>Das Problem ist, das die Liste sich garnicht verändert.</p>
<p>Ich habe mir einen Timer genommen und gebe in einem Label aller 0,1 sek den Wert von Element.Liste.size() aus. Der bleibt immer 0, obwohl mir die 2. MessageBox in Anhaengen() ja 1 &quot;sagt&quot;?!</p>
<p>Es geht mir nicht um das erase sondern, dass ich auf verschiedene Liste zuzugreifen scheine?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898633</guid><dc:creator><![CDATA[Rich2402]]></dc:creator><pubDate>Sat, 22 Oct 2005 12:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 12:45:16 GMT]]></title><description><![CDATA[<p>Da LISTE in deiner Klasse private ist, und du hier von einem Timer sprichst, ist das wohl nicht der komplette Code der Klasse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898663</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Sat, 22 Oct 2005 12:45:16 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 13:13:07 GMT]]></title><description><![CDATA[<p>Jaja, ich habe Liste auch public gemacht, aber nur zu Testzwecken.</p>
<p>Ich habe den Fehler gefunden:</p>
<p>Die Klassendeklaration habe ich in der Header-Datei (Unit1.h) gemacht.<br />
Nun hab ich Element.Anhaengen() immer aus Unit2 aufgerufen. Wenn ich Element.Anhaengen() von Unit1 aufrufe funktioniert alles wie gewollt.</p>
<p>Warum nicht aus Unit2 (Unit1.h ist includiert)?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/898676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898676</guid><dc:creator><![CDATA[Rich2402]]></dc:creator><pubDate>Sat, 22 Oct 2005 13:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Klassen on Sat, 22 Oct 2005 13:26:25 GMT]]></title><description><![CDATA[<p>weil die Deklaration &quot;class Klasse{...}Element;&quot; in jeder Übersetzungseinheit eine eigenständige Variable erzeugt - ein Wunder, daß es da keine Linker-Probleme gab. Versuch mal stattdessen folgendes:</p>
<pre><code class="language-cpp">//unit1.h
class Klasse{
  // alle Elemente der Klasse
};
extern Klasse Element;

//unit1.cpp
#include &quot;unit1.h&quot;
Klasse Element; // eventuell auch mit Konstruktor-Parametern

//andere .cpp
#include &quot;unit1.h&quot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/898687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/898687</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 22 Oct 2005 13:26:25 GMT</pubDate></item></channel></rss>