<?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[AnsiString und std::vector]]></title><description><![CDATA[<p>hola leute</p>
<p>hab hier ne klasse Daten:</p>
<pre><code class="language-cpp">class Daten 
{
   public:
      int x;
      int y;
      AnsiString str;
};
</code></pre>
<p>bei folgender anwendung ist der AnsiString danach ploetzlich wieder leer.</p>
<pre><code class="language-cpp">Daten d;
d.x = 1;
d.y = 2;
d.str = &quot;test&quot;;

std::vector&lt;Daten&gt; d_vec; // &lt;- zeig ich nur mal hier. ist aber nich auto
d_vec.push_back(d);

...

// danach irgendwo anders im prgramm
ShowMessage(d_vec.back().str);  // hier wird dann ne leere MessageBox angezeigt
</code></pre>
<p>warum ist das so ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159142/ansistring-und-std-vector</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 00:13:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159142.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Sep 2006 13:07:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to AnsiString und std::vector on Tue, 12 Sep 2006 13:10:43 GMT]]></title><description><![CDATA[<p>hola leute</p>
<p>hab hier ne klasse Daten:</p>
<pre><code class="language-cpp">class Daten 
{
   public:
      int x;
      int y;
      AnsiString str;
};
</code></pre>
<p>bei folgender anwendung ist der AnsiString danach ploetzlich wieder leer.</p>
<pre><code class="language-cpp">Daten d;
d.x = 1;
d.y = 2;
d.str = &quot;test&quot;;

std::vector&lt;Daten&gt; d_vec; // &lt;- zeig ich nur mal hier. ist aber nich auto
d_vec.push_back(d);

...

// danach irgendwo anders im prgramm
ShowMessage(d_vec.back().str);  // hier wird dann ne leere MessageBox angezeigt
</code></pre>
<p>warum ist das so ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135851</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 12 Sep 2006 13:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiString und std::vector on Tue, 12 Sep 2006 13:21:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Veränderst du den d irgendwo dazwischen?<br />
Es könnte daran liegen, dass AnsiString intern mit Referenzzählung arbeitet. Was bedeutet, dass bei Kopieen evtl. nur ein interner Zeiger rübergereicht wird. Dann würdest du bei Veränderung der Kopie auch das Orginal ändern. Das ist mir zwar noch nicht passiert, aber immerhin möglich. Schau mal in die Hilfe nach AnsiString::Unique</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135865</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 12 Sep 2006 13:21:03 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiString und std::vector on Tue, 12 Sep 2006 13:43:28 GMT]]></title><description><![CDATA[<p>hola Braunstein</p>
<p>ha jetzt mal zum testen den AnsiString gegen einen std::string ausgetauscht.<br />
noch immer das gleiche problem. scheinbar doch nicht durch den AnsiString verursacht.</p>
<pre><code class="language-cpp">// die Streamfunktion fuer meinen klassenvector
TStream&amp; operator&gt;&gt;(TStream &amp;s, ArtikelList &amp;al)
{
   unsigned int size(0);
   s &gt;&gt; size;
   ArtikelData data;
   while(size--)
   {
      s &gt;&gt; data;
      //ShowMessage(data.Text().c_str()); // testausgabe
      al.push_back();
      al.back() = data;
      //ShowMessage(al.back().Text().c_str()); // testausgabe
   }

   return s;
}

...

   try
   {
      TFileStream *datei = new TFileStream(&quot;data.dat&quot;, fmOpenRead);
      *datei &gt;&gt; private_db;
      delete datei;
      ShowMessage(private_db[0].Text().c_str()); // hier kommt nuex
   }
</code></pre>
<p>so sieht der code aus. bei der testausgabe bekomme ich von anfang an noch die strings angezeigt. im try-block dann bekomme ich in der MessageBox nix mehr.<br />
wenn ich mir dann spaeter im programm ne tabelle mit den variablen antzeigen lasse, dann sind die ersten 64 strings leer und die restlichen 38 sind da.<br />
in der datei stimmt auch alles.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135886</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 12 Sep 2006 13:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiString und std::vector on Tue, 12 Sep 2006 13:56:17 GMT]]></title><description><![CDATA[<p>Was genau soll das denn sein?</p>
<pre><code class="language-cpp">al.push_back();
      al.back() = data;
</code></pre>
<p>Das sollte eigentlich gar nicht compilieren. push_back verlangt einen Parameter.<br />
Wieso schreibst du stream-Operatoren für TStream? Die haben doch normalerweise keine. Wo kommt der operator &gt;&gt; für ArtikelData her?<br />
Mach bitte das ganze mal entweder mit Standardstreams oder nutze read und write von TStream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135900</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 12 Sep 2006 13:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiString und std::vector on Tue, 12 Sep 2006 14:05:04 GMT]]></title><description><![CDATA[<p>re</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Was genau soll das denn sein?</p>
<pre><code class="language-cpp">al.push_back();
      al.back() = data;
</code></pre>
<p>Das sollte eigentlich gar nicht compilieren. push_back verlangt einen Parameter.<br />
Wieso schreibst du stream-Operatoren für TStream? Die haben doch normalerweise keine. Wo kommt der operator &gt;&gt; für ArtikelData her?<br />
Mach bitte das ganze mal entweder mit Standardstreams oder nutze read und write von TStream.</p>
</blockquote>
<p>das mit al.back() = data; war nur mal so ein test.</p>
<p>mit</p>
<pre><code class="language-cpp">s &gt;&gt; data;
al.push_back(data);
</code></pre>
<p>komm ich auf das gleiche ergebnis.</p>
<p>die operatoren &lt;&lt; und &gt;&gt; hab ich fuer mich selber geschrieben.<br />
da drinnen wird dann natuerlich Read und Write verwendet.<br />
an den ueberladenen operatoren kanns ja nicht liegen, weil ich bei den testausgaben den string noch zu sehen bekomme. aber irgendwie verschwinden sie dann.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135907</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 12 Sep 2006 14:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to AnsiString und std::vector on Tue, 12 Sep 2006 14:24:55 GMT]]></title><description><![CDATA[<p>Ich habe nur den Verdacht, dass es genau an diesen Operatoren liegt, da dein Stringinhalt ja nach dem Löschen des Stream verschwindet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135936</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 12 Sep 2006 14:24:55 GMT</pubDate></item></channel></rss>