<?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[Probleme mit vector]]></title><description><![CDATA[<p>Ich habe folgendes Problem:</p>
<p>Ich habe die Klassen Team und mit der Klasse TeamDB möchte ich eine unbekannte Anzahl Teams verwalten.</p>
<pre><code class="language-cpp">class Team
{
Team(char* TeamName);
//....
}

class TeamDB
{
vector&lt;Team*&gt; Teams;
void LadeDatei(char* DateiPfad);
void ZeigeDBInhalt();
//.....
}

void LadeDatei(char* DateiPfad)
{
//....

while(!feof(NameFile))
{
//Lese Zeile mit Teamname aus
Teams.push_back(new Team(Zeile);
}

//....
}

void main()
{
TeamDB* Test = new TeamDB();
LadeDatei();
ZeigeDBInhalt();
}
</code></pre>
<p>Bei der Ausgabe wird aber bei allen Teams der Name des zuletzt eingelesenen Teams ausgegeben. Wenn ich jetzt aber folgenden Code anwende...</p>
<pre><code class="language-cpp">void LadeDatei(char* DateiPfad)
{
//....

//Lese Zeile mit Teamname aus
Teams.push_back(new Team(Zeile);
//Lese nächste Zeile aus
Teams.push_back(new Team(Zeile);
//usw.

//....
}
</code></pre>
<p>...werden die Teamnamen richtig gespeichert!</p>
<p>Wo liegt das Problem? Es spielt doch keine Rolle ob das push_back in einer while-Schleife ausgeführt oder nicht. Ich habe zuerst gedacht es läge an den Pointern und alle Pointer zeigen auf die selbe Adresse (darum die selben Werte), aber wieso funktioniert dann das zweite Beispiel? Ist ja eigentlich dasselbe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204035/probleme-mit-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 07:57:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204035.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jan 2008 15:22:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:22:13 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Problem:</p>
<p>Ich habe die Klassen Team und mit der Klasse TeamDB möchte ich eine unbekannte Anzahl Teams verwalten.</p>
<pre><code class="language-cpp">class Team
{
Team(char* TeamName);
//....
}

class TeamDB
{
vector&lt;Team*&gt; Teams;
void LadeDatei(char* DateiPfad);
void ZeigeDBInhalt();
//.....
}

void LadeDatei(char* DateiPfad)
{
//....

while(!feof(NameFile))
{
//Lese Zeile mit Teamname aus
Teams.push_back(new Team(Zeile);
}

//....
}

void main()
{
TeamDB* Test = new TeamDB();
LadeDatei();
ZeigeDBInhalt();
}
</code></pre>
<p>Bei der Ausgabe wird aber bei allen Teams der Name des zuletzt eingelesenen Teams ausgegeben. Wenn ich jetzt aber folgenden Code anwende...</p>
<pre><code class="language-cpp">void LadeDatei(char* DateiPfad)
{
//....

//Lese Zeile mit Teamname aus
Teams.push_back(new Team(Zeile);
//Lese nächste Zeile aus
Teams.push_back(new Team(Zeile);
//usw.

//....
}
</code></pre>
<p>...werden die Teamnamen richtig gespeichert!</p>
<p>Wo liegt das Problem? Es spielt doch keine Rolle ob das push_back in einer while-Schleife ausgeführt oder nicht. Ich habe zuerst gedacht es läge an den Pointern und alle Pointer zeigen auf die selbe Adresse (darum die selben Werte), aber wieso funktioniert dann das zweite Beispiel? Ist ja eigentlich dasselbe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445715</guid><dc:creator><![CDATA[Rookie1]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:27:15 GMT]]></title><description><![CDATA[<p>Ich würde fast wetten das du dem Konstruktor von Team nur einen Pointer übergibst, den du auch so in Team speicherst. Somit verweisen nachher alle Pointer auf die gleiche Adresse. Vermutlich auch noch eine temporäre Variable in der Methode zum Auslesen.</p>
<p>Verwende std::string, dann hast du das Problem nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445718</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:28:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Mal abgesehen davon, dass bei den push_backs eine schliessende Klammer fehlt sehe ich hier erstmal nichts. Es fehlen aber noch weitere Informationen. Zeig mal den Konstruktor von Team und ZeigeDBInhalt().<br />
Warum nimmst du hier überhaupt Zeiger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445719</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:31:38 GMT]]></title><description><![CDATA[<p>Rookie1 schrieb:</p>
<blockquote>
<p>...Bei der Ausgabe wird aber bei allen Teams der Name des zuletzt eingelesenen Teams ausgegeben. Wenn ich jetzt aber folgenden Code anwende...werden die Teamnamen richtig gespeichert!</p>
</blockquote>
<p>1. Wo ist die Ausgebenfunktion, ich tippe eher da auf einen Fehler<br />
2. Warum versuchen sich eigentlich alle an C-Strings statt an std::string der deutlich weniger Anfängerfehler mit sich bringt (Ich hoffe du hast auch einen Destruktor um den Speicher wieder freizugeben wenn du schon mit Pointern arbeitest).</p>
<p>Rookie1 schrieb:</p>
<blockquote>
<p>Wo liegt das Problem? Es spielt doch keine Rolle ob das push_back in einer while-Schleife ausgeführt oder nicht. Ich habe zuerst gedacht es läge an den Pointern und alle Pointer zeigen auf die selbe Adresse (darum die selben Werte), aber wieso funktioniert dann das zweite Beispiel? Ist ja eigentlich dasselbe!</p>
</blockquote>
<p>3. Es liegt wohl ein Fehler in der Benutzung von std::vector in den Bereichen vor die du nicht gepostet hast (Wäre auch gut wenn du an sich keine Fehler wie &quot;Teams.push_back(new Team(Zeile);&quot; postest, wo z.B. die schließende Klammer fehlt).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445721</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:40:10 GMT]]></title><description><![CDATA[<p>Spontan würde ich sagen</p>
<pre><code class="language-cpp">while(!feof(NameFile))
{
// hier musst du für die Zeile neuen speicher allociren
Zeile = new char[...];
//Lese Zeile mit Teamname aus
Teams.push_back(new Team(Zeile);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1445725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445725</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:49:27 GMT]]></title><description><![CDATA[<p>Der Konstruktor von Team:</p>
<pre><code class="language-cpp">Team(char* strName) {this-&gt;Name = strName;}
</code></pre>
<pre><code class="language-cpp">void TeamDB::ZeigeInhaltDB()
{
cout &lt;&lt; &quot;Show All Teams&quot; &lt;&lt;endl;
for (i=0;i &lt; Teams.size();i++)
{
cout &lt;&lt; i &lt;&lt; &quot; &quot;&lt;&lt; Teams[i]-&gt;getName() &lt;&lt; endl;
}
}
</code></pre>
<p>Team::getName() gibt nur mit einem return den Teamnamen zurück.</p>
<blockquote>
<p>Ich würde fast wetten das du dem Konstruktor von Team nur einen Pointer übergibst, den du auch so in Team speicherst. Somit verweisen nachher alle Pointer auf die gleiche Adresse. Vermutlich auch noch eine temporäre Variable in der Methode zum Auslesen.</p>
</blockquote>
<p>Dass das Problem bei den Pointern liegt habe ich auch vermutet, aber wieso läft denn das 2.Beispiel??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445735</guid><dc:creator><![CDATA[Rookie1]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:52:04 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17279">@Ramsis</a>: Genau das wars. Es funktioniert jetzt. Vielen dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445739</guid><dc:creator><![CDATA[Rookie1]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 15:56:36 GMT]]></title><description><![CDATA[<p>Nicht so schnell vieleicht ist es besser diese Speicherallokierung<br />
in der klasse Team zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445744</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Tue, 29 Jan 2008 15:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 16:07:04 GMT]]></title><description><![CDATA[<p>Also etwa so?</p>
<pre><code class="language-cpp">Team(char* strName)
{
this-&gt;Name = new char[20];
this-&gt;Name = strName;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1445753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445753</guid><dc:creator><![CDATA[Rookie1]]></dc:creator><pubDate>Tue, 29 Jan 2008 16:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 16:09:25 GMT]]></title><description><![CDATA[<p>Rookie1 schrieb:</p>
<blockquote>
<p>Also etwa so?</p>
<pre><code class="language-cpp">Team(char* strName)
{
this-&gt;Name = new char[20];
this-&gt;Name = strName;
}
</code></pre>
</blockquote>
<p>Da hast du 1. das gleiche Problem immernoch und 2. ein Speicherleck. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">Team() : Name(0){ }
Team(char* strName){
  this-&gt;Name = new char[strlen(strName)+1];
  strncpy(this-&gt;Name, strName, strlen(strName)+1);
}
~Team(){
  if (Name) delete[] Name;
}
</code></pre>
<p>So in eta.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445757</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 29 Jan 2008 16:09:25 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 16:17:16 GMT]]></title><description><![CDATA[<p>Oh man, da hab ich ja noch einige (Lern-)Arbeit vor mir! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Aber wenigstens bin ich jetzt mal aus meiner Gedanklichen Sackgasse raus und weiss wo mein Problem liegt. Nochmals vielen Dank für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445763</guid><dc:creator><![CDATA[Rookie1]]></dc:creator><pubDate>Tue, 29 Jan 2008 16:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 17:13:56 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Team() : Name(0){ }
Team(char* strName){
  this-&gt;Name = new char[strlen(strName)+1];
  strncpy(this-&gt;Name, strName, strlen(strName)+1);
}
~Team(){
  if (Name) delete[] Name;
}
</code></pre>
<p>So in eta.</p>
</blockquote>
<p>Wenn Du Anfänger bist und C++ (nicht C) lernen willst, dann eher so:</p>
<pre><code class="language-cpp">Team() { }
Team(string const&amp; strName)
   : Name(strName) { }

private:
string Name;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1445818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445818</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 29 Jan 2008 17:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Tue, 29 Jan 2008 21:15:21 GMT]]></title><description><![CDATA[<p>Oder du einfach nicht gerne so langen Code schreiben willst aber doch gerne die Basics lernen willst:</p>
<pre><code class="language-cpp">Team(const char* name)
    : m_name(new char[std::strlen(name) + 1])
{    
    std::strcpy(m_name, name); 
}

~Team()
{
    delete [] m_name;
}
</code></pre>
<p>und das ganze kurz erklären:<br />
Team-Konstruktor bekommt einen const char-Zeiger übergeben, da du ja nichts an dem String verändern willst sondern ihn kopieren willst(damit du sicher gehen kannst das er auch noch existiert!).</p>
<p>Nun wird in der Initialisierungsliste m_name ein Speicherbereich aufm Heap zugewiesen von char * (länge des Strings + 1(für Nullterminierungszeichen!)).</p>
<p>Damit kannst du sichergehen das dein String name auch in m_name reinpasst und kannst ihn einfach kopieren (std::strcpy).</p>
<p>Da du Speicher aufm Heap angefordert hast und somit dieser nicht automatisch freigeben wird, musst du diesen selbst freigeben. Da ein Array delete [] anstatt delete.</p>
<p>Soweit sollte das als Erklärung reichen!</p>
<p>Noch eine Frage. Warum packst du in deinen vector denn Zeiger von Team? (wenn du das machst musst du dich wieder um's aufräumen kümmern!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445981</guid><dc:creator><![CDATA[(D)Evil_loggedoff]]></dc:creator><pubDate>Tue, 29 Jan 2008 21:15:21 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Wed, 30 Jan 2008 06:45:38 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>2. Warum versuchen sich eigentlich alle an C-Strings statt an std::string der deutlich weniger Anfängerfehler mit sich bringt</p>
</blockquote>
<p>Weil &quot;alle&quot; Opfer von solch schwachsinnigen &quot;C/C++&quot;-Büchern sind deren Autoren meinen C++ sei eine Fortsetzung von C und nicht mitgekriegt haben dass es eine Standardbibliothek mit std::string etc. gibt. Diese Autoren haben einfach nicht mitbekommen dass sich C++ in den letzten 15-20 Jahren so weit von C entfernt hat dass const char* - Gefrickel, printf() &amp;Co in den meisten Fällen nurnoch Altlasten sind. Wenigstens hat er in seiner Ausgabefunktion cout benutzt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446072</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 30 Jan 2008 06:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit vector on Wed, 30 Jan 2008 08:33:05 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...Autoren meinen C++ sei eine Fortsetzung von C und nicht mitgekriegt haben dass es eine Standardbibliothek mit std::string etc....</p>
</blockquote>
<p>... und oftmals der Ansicht sind, dass Anfänger dieselbe Sch*** fressen müssten, die ihnen damals auch schon nicht geschmeckt hat (weil &quot;man nur so wirklich versteht, was da passiert&quot; = &quot;den Orden 'Programmier' verliehen bekommen darf&quot;).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446113</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 30 Jan 2008 08:33:05 GMT</pubDate></item></channel></rss>