<?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[STL-Listen in Datei schreiben]]></title><description><![CDATA[<p>Hallo!<br />
Ich bin neu hier und eigentlich noch C++ Anfänger.<br />
Ich habe folgendes Problem:<br />
In meinem Programm hab ich 2 STL-Listen, die dynamisch erzeugt wurden.<br />
Diese beiden Listen würde ich gerne in eine Datei speichern und auch wieder<br />
laden können.<br />
Mit der write()-Methode von fstream ging das nicht so einfach, da anscheinend nur die<br />
Zeigervariablen der Listenelemente gespeichert wurden, und diese ja<br />
beim nächsten Programmstart nicht mehr gültig sind.<br />
In der Liste selbst sind auch dynamisch erzeugte Objekte gespeichert, aber das dürfte<br />
an der Stelle ja nichts ausmachen.<br />
Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/154129/stl-listen-in-datei-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 20:24:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154129.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Jul 2006 17:00:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 17:07:57 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich bin neu hier und eigentlich noch C++ Anfänger.<br />
Ich habe folgendes Problem:<br />
In meinem Programm hab ich 2 STL-Listen, die dynamisch erzeugt wurden.<br />
Diese beiden Listen würde ich gerne in eine Datei speichern und auch wieder<br />
laden können.<br />
Mit der write()-Methode von fstream ging das nicht so einfach, da anscheinend nur die<br />
Zeigervariablen der Listenelemente gespeichert wurden, und diese ja<br />
beim nächsten Programmstart nicht mehr gültig sind.<br />
In der Liste selbst sind auch dynamisch erzeugte Objekte gespeichert, aber das dürfte<br />
an der Stelle ja nichts ausmachen.<br />
Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103330</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 17:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 17:04:59 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-309286.html#309286" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-309286.html#309286</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103331</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 17:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 17:43:03 GMT]]></title><description><![CDATA[<p>Danke, aber das will bei mir nicht funktionieren.<br />
Anscheinend wegen den dynamischen Objekten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103355</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 17:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 18:21:04 GMT]]></title><description><![CDATA[<p>So natürlich nicht, für Listen müsstest du durchiterieren.<br />
Schau mal hier: <a href="http://www.boost.org/libs/serialization/doc/index.html" rel="nofollow">http://www.boost.org/libs/serialization/doc/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103372</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 24 Jul 2006 18:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 18:22:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Vielleicht zeigst du uns mal etwas Code. Insbesondere die Deklaration der Klasse, die du speichern möchtest.<br />
Prinzipiell ist es natürlich so, dass write einfach nur die Inhalte aller Variablen rausschreibt (so eine Art flache Kopie). Du mußt dir hier eine eigene write-Funktion (als Member deiner Klasse) schreiben, die auch die Inhalte der dynamisch verwalteten Membervariablen mit rausschreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103374</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 24 Jul 2006 18:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 19:25:07 GMT]]></title><description><![CDATA[<p>Das ist die Deklaration einer Klasse, die in der Liste gespeichert wird.<br />
Die andere Klasse ist ähnlich.</p>
<pre><code class="language-cpp">#include&lt;string&gt;

using std::string;

class BombLaunch
{
public:
        BombLaunch()
        {}
        ~BombLaunch()
        {}
        void setBombId(string);
        void setBombLaunchTime(unsigned int);
        void setBombLaunchGroup(unsigned int);
        void setBombLaunchSlot(unsigned int);
        string getBombId();
        unsigned int getBombLaunchTime();
        unsigned int getBombLaunchGroup();
        unsigned int getBombLaunchSlot();

private:
        string BombId;
        unsigned int BombLaunchTime;
        unsigned int BombLaunchGroup;
        unsigned int BombLaunchSlot;
};
</code></pre>
<p>Das ist ein Teil der Deklaration meiner Projektklasse:</p>
<pre><code class="language-cpp">typedef list&lt;BombLaunch&gt; BombLaunchList;

class Project
{
public:
	Project(string FileName)
	{
		BombList=new BombLaunchList;
	}
        ~Project()
        {
		delete BombList;
	}
...
private:
	BombLaunchList* BombList
	BombLaunchList::iterator BombIter;
...
</code></pre>
<p>Die STL-Liste BombList gilt es zu speichern und auch wieder zu laden.</p>
<p>Die Funktion</p>
<pre><code class="language-cpp">Status Project::FileAccess(Action _Action,string _FileName)
</code></pre>
<p>wird vom Hauptprogramm aufgerufen, um das Speichern oder Laden einzuleiten.<br />
Action ist ein Aufzählungstyp, der über Erfolg oder Fehlschlag informiert.<br />
Das Hauptprogramm bekommt durch die Methode getBombs() einen Zeiger auf die<br />
Liste, was auch wunderbar funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103407</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 19:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 19:48:49 GMT]]></title><description><![CDATA[<p>Wo liegt genau das Problem ???<br />
Einfach die Liste durchlaufen und &quot;string BombID&quot; in ne Datei schreiben...</p>
<p>Mehr hast du ja nicht zum speichern.<br />
Oder operator&lt;&lt; überladen und es so wie in der FAQ machen <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>
<p>Edit: Sry habe die ganzen uint's übersehen die natürlich auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103419</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 19:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 20:28:38 GMT]]></title><description><![CDATA[<p>Ich wollte die Liste am Stück speichern, aber das scheint ja nur mit Vectoren<br />
zu gehen.<br />
Das Problem ist hauptsächlich, dass ich beim Laden nicht bis eof lesen kann,<br />
da noch eine zweite Liste ins gleiche File soll.<br />
Ok, ich könnte vor dem schreiben der eigentlichen Liste jeweils den Wert<br />
von size() voranstellen, dass ich weiss, wie weit ich lesen muss.<br />
In dem Fall wäre es wahrscheinlich besser, die Datei binär zu schreiben.<br />
Dann sieht man das ganze Durcheinander nicht mehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Also dann praktisch so:</p>
<pre><code class="language-cpp">fstream ProjectFile;
ProjectFile.open(_FileName.c_str(),ios_base::out);
ProjectFile&lt;&lt;BombList-&gt;size()&lt;&lt;&quot;\n&quot;; //Optional
for(BombIter=BombList-&gt;begin();BombIter!=BombList-&gt;end();BombIter++)
{
ProjectFile&lt;&lt;BombIter-&gt;getBombId()&lt;&lt;&quot;\n&quot;;
ProjectFile&lt;&lt;BombIter-&gt;getBombLaunchTime()&lt;&lt;&quot;\n&quot;;
ProjectFile&lt;&lt;BombIter-&gt;getBombLaunchGroup()&lt;&lt;&quot;\n&quot;;
ProjectFile&lt;&lt;BombIter-&gt;getBombLaunchSlot()&lt;&lt;&quot;\n&quot;;
}
ProjectFile.close();
</code></pre>
<p>Dann zum Lesen:</p>
<pre><code class="language-cpp">BombList-&gt;clear();
ProjectFile.open(_FileName.c_str(),ios_base::in);
ProjectFile&gt;&gt;int size;
for(int i=1;i!=size;i++)
{
//Dann die entsprechenden Typen einlesen und mit meiner add-Methode wieder
zur Liste hinzufügen
}
</code></pre>
<p>Oder geht das irgendwie besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103446</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 20:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 20:25:07 GMT]]></title><description><![CDATA[<p>Ich hab's grad probiert, speichern geht zumindest.<br />
Jetzt mal laden probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103450</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 20:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 20:49:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">string tempBombId;
	unsigned int tempBombLaunchTime,tempBombLaunchGroup,tempBombLaunchSlot,size;

	//If LOAD_PROJECT is selected for action
	if(_Action==LOAD)
	{
		//Open projectfile
		ProjectFile.open(_FileName.c_str(),ios_base::in);
		if(!ProjectFile)
		{
			return LOAD_ERROR;
		}

		//Read data from projectfile and write it to the musiclist and bomblist
		BombList-&gt;clear();
		ProjectFile&gt;&gt;size;
		for(int i=1;i!=size;i++) 
		{
			ProjectFile&gt;&gt;tempBombId&gt;&gt;tempBombLaunchTime&gt;&gt;tempBombLaunchGroup&gt;&gt;tempBombLaunchSlot;
			editBombs(ADD,tempBombId,tempBombLaunchTime,tempBombLaunchGroup,tempBombLaunchSlot,i,0);
		}

		ProjectFile.close();
</code></pre>
<p>So hab ich jetzt das Laden realisiert. Jedoch wird nur 1 Eintrag gelesen,<br />
obwohl ich zum Test 2 drin hab.<br />
size wird mit 2 ausgelesen.<br />
Die editBombs-Methode wird also nur 1 mal ausgeführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103462</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 20:49:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Mon, 24 Jul 2006 23:15:24 GMT]]></title><description><![CDATA[<p>mase schrieb:</p>
<blockquote>
<p>Ich wollte die Liste am Stück speichern, aber das scheint ja nur mit Vectoren<br />
zu gehen.File</p>
</blockquote>
<p>Meinst du mit am Stück weil da nur ein Zeile mit copy steht ???<br />
Das könntest du auch machen, nur müsstest du dafür op&lt;&lt; überladen, aber das ist ja egal, lerns erstmal zu Fuß...</p>
<p>mase schrieb:</p>
<blockquote>
<p>Das Problem ist hauptsächlich, dass ich beim Laden nicht bis eof lesen kann,<br />
da noch eine zweite Liste ins gleiche File soll.<br />
Ok, ich könnte vor dem schreiben der eigentlichen Liste jeweils den Wert<br />
von size() voranstellen, dass ich weiss, wie weit ich lesen muss.</p>
</blockquote>
<p>Suche dir nen eigenes Makierungszeichen und lese immer bis dahin, bzw mit deinem size.</p>
<p>Dein Laden muss ungefähr so aussehen. Du brauchst zwei Schleifen, eine für die ganze Datei und eine für die einzelnen Listen dadrin.</p>
<pre><code class="language-cpp">while(!ProjectFile.eof() &amp;&amp; !ProjectFile.fail())
{
      int size;
      ProjectFile &gt;&gt; size;

      for(int i=0;i&lt;size &amp;&amp; !ProjectFile.fail();++i)
      {
          if((ProjectFile&gt;&gt;tempBombId) &amp;&amp; (ProjectFile&gt;&gt;tempBombLaunchTime)
             &amp;&amp; (ProjectFile &gt;&gt;tempBombLaunchGroup) &amp;&amp; (ProjectFile&gt;&gt;tempBombLaunchSlot))
                                    edit(...);       
      }  
}

// Prüfen ob alles ohne Fehler gelesen wurde
</code></pre>
<p>Das:</p>
<pre><code class="language-cpp">for(BombIter=BombList-&gt;begin();BombIter!=BombList-&gt;end();BombIter++)
{
ProjectFile&lt;&lt;BombIter-&gt;getBombId()&lt;&lt;&quot;\n&quot;;
ProjectFile&lt;&lt;BombIter-&gt;getBombLaunchTime()&lt;&lt;&quot;\n&quot;;
ProjectFile&lt;&lt;BombIter-&gt;getBombLaunchGroup()&lt;&lt;&quot;\n&quot;;
ProjectFile&lt;&lt;BombIter-&gt;getBombLaunchSlot()&lt;&lt;&quot;\n&quot;;
}
</code></pre>
<p>Sollte dann demensprechend so aussehen:</p>
<pre><code class="language-cpp">for(BombIter=BombList-&gt;begin();BombIter!=BombList-&gt;end();++BombIter)
{
ProjectFile &lt;&lt;BombIter-&gt;getBombId() &lt;&lt; &quot; &quot; &lt;&lt;BombIter-&gt;getBombLaunchTime()
&lt;&lt;&quot; &quot; &lt;&lt;BombIter-&gt;getBombLaunchGroup() &lt;&lt;&quot; &quot;
&lt;&lt;&quot; &quot; &lt;&lt;BombIter-&gt;getBombLaunchSlot() &lt;&lt;endl;
}
</code></pre>
<blockquote>
<p>Jedoch wird nur 1 Eintrag gelesen,<br />
obwohl ich zum Test 2 drin hab.<br />
size wird mit 2 ausgelesen.<br />
Die editBombs-Methode wird also nur 1 mal ausgeführt.</p>
</blockquote>
<p>Schau dir mal den Kopf der Schleife genau an und gehe mal den Wert von size und i im Kopf durch <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/1103521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103521</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 24 Jul 2006 23:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Tue, 25 Jul 2006 08:20:52 GMT]]></title><description><![CDATA[<p>Steh ich jetzt auf'm Schlauch?<br />
size ist im Testfall 2.<br />
Solange i ungleich 2 ist, wird die Schleife weiter durchlaufen.<br />
Au sch...<br />
Du hast recht!</p>
<pre><code class="language-cpp">for(unsigned int i=0;i!=size;i++)
		{
			ProjectFile&gt;&gt;tempBombId&gt;&gt;tempBombLaunchTime&gt;&gt;tempBombLaunchGroup&gt;&gt;tempBombLaunchSlot;
			editBombs(ADD,tempBombId,tempBombLaunchTime,tempBombLaunchGroup,tempBombLaunchSlot,i+1,0);
		}
</code></pre>
<p>So geht's!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103598</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Jul 2006 08:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Tue, 25 Jul 2006 12:04:24 GMT]]></title><description><![CDATA[<p>Ein kleines Problem hab ich noch.<br />
Eine Variable eines gespeicherten Objekts in der Liste ist ein Aufzählungstyp:</p>
<pre><code class="language-cpp">enum Gap {NONE,FADE,CROSSFADE};
</code></pre>
<p>Den Typ Gap kann ich in die Datei schreiben.<br />
Doch auslesen als Gap geht nicht. Da hab ich den Umweg gewählt, Gap als unsigned int<br />
in eine temporäre Variable auszulesen und mit</p>
<pre><code class="language-cpp">switch(tempGap)
			{
				case 0:MusicGap=NONE;break;
				case 1:MusicGap=FADE;break;
				case 2:MusicGap=CROSSFADE;break;
			}
</code></pre>
<p>der eigentlichen Variablen vom Typ Gap zuzuweisen.<br />
Vielleicht nicht so ganz elegant, aber es geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103764</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Jul 2006 12:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Tue, 25 Jul 2006 12:27:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">MusicGap = static_cast&lt;Gap&gt;(tempGap);
</code></pre>
<p>reicht hier auch. Da brauchst du kein switch.<br />
Wieso eigentlich unsigned int?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103792</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 25 Jul 2006 12:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Listen in Datei schreiben on Tue, 25 Jul 2006 12:48:43 GMT]]></title><description><![CDATA[<p>Ja, das mit dem static_cast hat auch funktioniert.<br />
Bei den Operatoren zur Typenumwandlung bin ich noch nicht angelangt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Warum unsigned int? Ok, int hätte gereicht.<br />
Aber ich hab mir irgendwie angewöhnt, integer, die nur positiv sein können,<br />
als unsigned zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103818</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Jul 2006 12:48:43 GMT</pubDate></item></channel></rss>