<?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[stack&amp;lt;string&amp;gt; mit fstream speichern]]></title><description><![CDATA[<p>hi, ich habe eine objekt vom typ stack&lt;string&gt; und möchte dieses wie schon in dem titel gesagt abspeichern.<br />
meine überlegungen waren:</p>
<pre><code class="language-cpp">stack&lt;string&gt; Stack

....

Stack.open(&quot;Stack.dat&quot;, ios::out|ios::binary);
Stack.write(&amp;Stack, sizeof(Stack));           //Fehler
Stack.close();
</code></pre>
<p>dabei bekomme ich aer leider folgende fehlermeldung die ich nicht richtig deuten kann:</p>
<blockquote>
<p>Fehler: keine passende Funktion für Aufruf von »std::basic_fstream&lt;char, std::char_traits&lt;char&gt; &gt;::write(std::stack&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::deque&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::allocator&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt; &gt; &gt;*, unsigned int)«</p>
</blockquote>
<p>an was liegt das? ich hab gehört das es probleme beim speichern von strings mit dieser methode gibt, da der inhalt in der stringklasse nur per pointer referenziert ist und daher nicht mit gespeichert wird.</p>
<p>was kann man da machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204151/stack-lt-string-gt-mit-fstream-speichern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 14:43:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204151.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jan 2008 17:21:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Wed, 30 Jan 2008 17:21:25 GMT]]></title><description><![CDATA[<p>hi, ich habe eine objekt vom typ stack&lt;string&gt; und möchte dieses wie schon in dem titel gesagt abspeichern.<br />
meine überlegungen waren:</p>
<pre><code class="language-cpp">stack&lt;string&gt; Stack

....

Stack.open(&quot;Stack.dat&quot;, ios::out|ios::binary);
Stack.write(&amp;Stack, sizeof(Stack));           //Fehler
Stack.close();
</code></pre>
<p>dabei bekomme ich aer leider folgende fehlermeldung die ich nicht richtig deuten kann:</p>
<blockquote>
<p>Fehler: keine passende Funktion für Aufruf von »std::basic_fstream&lt;char, std::char_traits&lt;char&gt; &gt;::write(std::stack&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::deque&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::allocator&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt; &gt; &gt;*, unsigned int)«</p>
</blockquote>
<p>an was liegt das? ich hab gehört das es probleme beim speichern von strings mit dieser methode gibt, da der inhalt in der stringklasse nur per pointer referenziert ist und daher nicht mit gespeichert wird.</p>
<p>was kann man da machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446514</guid><dc:creator><![CDATA[staxx]]></dc:creator><pubDate>Wed, 30 Jan 2008 17:21:25 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Wed, 30 Jan 2008 18:00:29 GMT]]></title><description><![CDATA[<p>Hi staxx,</p>
<p>erstens hast du vermutlich einen Namenskonflikt.</p>
<p>Ist Stack jetzt deine Datei oder dein Stack-Objekt.</p>
<p>Zudem musss ich dir leider sagen, dass es in C++ keine Standard-Serialisierung gibt.</p>
<p>Du mußt dich selbst darum kümmern, wie deine Objekte in den Stream geschrieben<br />
und wieder ausgelesen werden.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446541</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 30 Jan 2008 18:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Wed, 30 Jan 2008 18:19:49 GMT]]></title><description><![CDATA[<p>ups, ja hast recht, das mit dem namen hab ich garnicht gesehnen.<br />
ich meine das natürlich so:</p>
<pre><code class="language-cpp">stack&lt;string&gt; Stack;
fstream StackFile;

....

StackFile.open(&quot;Stack.dat&quot;, ios::out|ios::binary);
StackFile.write(&amp;Stack, sizeof(Stack));           //Fehler
StackFile.close();
</code></pre>
<blockquote>
<p>Du mußt dich selbst darum kümmern, wie deine Objekte in den Stream geschrieben<br />
und wieder ausgelesen werden.</p>
</blockquote>
<p>das versteh ich nicht ganz, hier ist doch gar nichts mit streams?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446560</guid><dc:creator><![CDATA[staxx]]></dc:creator><pubDate>Wed, 30 Jan 2008 18:19:49 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Wed, 30 Jan 2008 19:51:45 GMT]]></title><description><![CDATA[<p>Hi staxx,</p>
<p>StackFile ist ein fstream.</p>
<p>ich dachte da an sowas:</p>
<pre><code class="language-cpp">// EDIT: Hier kannste auch ne Template-Funktion draus machen
std::ostream&amp; operator &lt;&lt;(std::ostream&amp; s, const stack&lt;std::string&gt;&amp; st){
st.writeToStream(s);

}
</code></pre>
<pre><code class="language-cpp">template&lt;typename T&gt; stack{

void writeToStream(std::ostream&amp; s){
    //Wahrscheinlich wirst du keinen std:vector haben, aber soll ja nur ne Skizze sein
    s &lt;&lt; vec.size();
    for(typename std::vector&lt;T&gt;::iterator it = vec.begin; it!=vec.end(); ++it){
        s &lt;&lt; (*it);
    }
}

}
</code></pre>
<pre><code class="language-cpp">stack&lt;std::string&gt; Stack;
fstream StackFile;

....

StackFile.open(&quot;Stack.dat&quot;, ios::out|ios::binary);
StackFile &lt;&lt; Stack;
StackFile.close();
</code></pre>
<p>Ich hoffe du weißt jetzt ungefähr, was ich meine...</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446597</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 30 Jan 2008 19:51:45 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Wed, 30 Jan 2008 19:36:13 GMT]]></title><description><![CDATA[<p>Hi staxx,</p>
<p>was mir gerade kommt, willst du stack aus der Standard-Library serialisieren.</p>
<p>Dann kannste das natürlich nicht in ne Memberfunktion machen.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446605</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 30 Jan 2008 19:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Wed, 30 Jan 2008 23:02:33 GMT]]></title><description><![CDATA[<p>Hi staxx,</p>
<p>ich hab mit nochmal Gedanken über deine Frage gemacht und bin zu der Erkenntnis<br />
gekommen, dass es nicht clever ist den operator &lt;&lt; zu überschreiben.</p>
<p>Deswegen schlag ich mal so ne Lösung für deque vor, denn stack<br />
ist zum serialisieren wirklich ne blöde Datenstruktur ^^:</p>
<pre><code class="language-cpp">#include &lt;deque&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

template&lt;typename T&gt; void serialize(std::ostream&amp; s, const T&amp; i){ 
	s.write((char*)&amp;i, sizeof(T));
}

template&lt;typename T&gt; void deserialize(std::istream&amp; s, T&amp; i){
	s.readsome((char*)&amp;i, sizeof(T));
}

void serialize(std::ostream&amp; s, const std::string&amp; str){ 
	size_t i = str.length();
	serialize(s, i);
	s.write(str.c_str(), i);
}

void deserialize(std::istream&amp; s, std::string&amp; str){
	size_t i;
	deserialize(s, i);
	char* c = (char*)malloc(i+1);
	s.readsome(c, i);
	c[i] = '\0';
	str = c;
	free(c);
}

template&lt;typename T&gt; void serializeList(std::ostream&amp; s, const T&amp; deque){
	size_t i = deque.size();
	serialize(s, i);
	for(typename T::const_iterator it = deque.begin(); it!=deque.end(); ++it){
		serialize(s, *it);
	}
}

template&lt;typename T, typename L&gt; void deserializeList(std::istream&amp; s, L&amp; deque){ 
	size_t i;
	for(deserialize(s, i); i&gt;0; --i){
		T value;
		deserialize(s, value);
		deque.push_back(value);
	}
}

int main(int argc, char *argv[]){
	std::deque&lt;std::string&gt; myDeque;
	myDeque.push_back(&quot;How to&quot;);
	myDeque.push_back(&quot;serialize&quot;);
	myDeque.push_back(&quot;a deque&quot;);
	std::fstream outFile(&quot;/deque.dat&quot;, std::ios::out|std::ios::binary); 
	serializeList(outFile, myDeque);
	outFile.close();

	myDeque.clear();

	std::fstream inFile(&quot;/deque.dat&quot;, std::ios::in|std::ios::binary);
	deserializeList&lt;std::string, std::deque&lt;std::string&gt; &gt;(inFile, myDeque);
	inFile.close();

	std::cout &lt;&lt; myDeque.back() &lt;&lt; std::endl;
	myDeque.pop_back();
	std::cout &lt;&lt; myDeque.back() &lt;&lt; std::endl;
	myDeque.pop_back();
	std::cout &lt;&lt; myDeque.back() &lt;&lt; std::endl;
	myDeque.pop_back();

	std::vector&lt;unsigned int&gt; vec;
	vec.push_back(54);
	vec.push_back(74);
	vec.push_back(90);
	std::fstream outFile2(&quot;/vec.dat&quot;, std::ios::out|std::ios::binary); 
	serializeList(outFile2, myDeque);
	outFile2.close();

	myDeque.clear();

	std::fstream inFile2(&quot;/vec.dat&quot;, std::ios::in|std::ios::binary);
	deserializeList&lt;unsigned int, std::vector&lt;unsigned int&gt; &gt;(inFile2, vec);
	inFile2.close();

	std::cout &lt;&lt; vec.back() &lt;&lt; std::endl;
	vec.pop_back();
	std::cout &lt;&lt; vec.back() &lt;&lt; std::endl;
	vec.pop_back();
	std::cout &lt;&lt; vec.back() &lt;&lt; std::endl;
	vec.pop_back();

    return 0;
}
</code></pre>
<p>EDIT: Die Listen auch noch als Template</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446715</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 30 Jan 2008 23:02:33 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Thu, 31 Jan 2008 16:34:08 GMT]]></title><description><![CDATA[<p>wow, vielen dank für die mühe! es klappt wunderbar.</p>
<p>bloß was ich noch nicht hinkriege(was aber nix mit deinem code, sondern mit meiner unkenntnis über deque zu tuen hat) ist folgendes:</p>
<pre><code class="language-cpp">deque&lt;string&gt; Deq;
string Str;

....

if(!Deq.emty())
{
        cout &lt;&lt; Deq.back() &lt;&lt; endl;   //das funktioniert
}
if(!Deq.empty())
{
        Str = Deq.back();    //hier bleibt das programm einfach stehen
}
</code></pre>
<p>wieso bleibt da das programm stehen? ich mein eine fehlermeldung beim compilieren oder sogar in der laufzeit könnt ich eher verstehen, aber garnichts?<br />
aber was viel wichtiger ist: was ist falsch? und was kann ich machen damit es funktioniert?<br />
ich hab mir schon im internet was zu deque angeschaut, aber nichts brauchares gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447141</guid><dc:creator><![CDATA[staxx]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Thu, 31 Jan 2008 17:21:55 GMT]]></title><description><![CDATA[<p>Hi staxx,</p>
<p>abgesehen von deinem Tippfehler ^^ (, der natürlich einen Compilerfehler<br />
hervorufen würde), fällt mir in dem geposteten Code kein Fehler auf.</p>
<p>Wahrscheinlich führt Code davor zu einem undefinierten Verhalten (oder so).</p>
<p>Ich bin jetzt aber auch kein C++-Profi, dennoch bin ich ziemlich sicher,<br />
dass der Code fehlerfrei ist (oder ich gerade völlig blind ^^)</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447184</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 31 Jan 2008 17:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Thu, 31 Jan 2008 18:11:31 GMT]]></title><description><![CDATA[<p>jup, du hattest recht, es lag nicht an der zuweisung, sondern an anderen code. bloß leider wurde das problem durch deinen code hervorgerufen.</p>
<p>das problem ist das der deque nicht richtig geladen wird, damit meine ich das die enthaltenen strings nicht alle richtig sind. das heißt das die ersten leer sind, dann einige zerstückelt und teilweise falschen zeichen am ende, und die letzten sind immer richtig.</p>
<p>hier kann ich aber 100%ig sagen das es nicht an meinem anderen code liegt da ich erst den deque befülle, und dann langsam wieder abarbeite. dazu wird er von zeit zu zeit zur sicherheit gespeichert damit die laufzeit unterbrechen kann und später das programm an der selben stelle(bzw. der wo die letzte sicherungskopie des deque angelegt wurde) fortsetzen kann.<br />
daher: wenn ich das program ganz normal durchlaufen lasse gibt es keine probleme, wenn es aber mit dem neu geladenen deque arbeitet treten fehlerhate strings auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447206</guid><dc:creator><![CDATA[staxx]]></dc:creator><pubDate>Thu, 31 Jan 2008 18:11:31 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Thu, 31 Jan 2008 22:52:11 GMT]]></title><description><![CDATA[<p>Sorry staxx,</p>
<p>keine Absicht...</p>
<p>In Zeile 77 und 80 muss natürlich vec hin und nicht myDeque.</p>
<p>Aber sonst kann ich keinen Fehler entdecken. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447334</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 31 Jan 2008 22:52:11 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Fri, 01 Feb 2008 17:32:46 GMT]]></title><description><![CDATA[<p>also ich hab deinen code 1:1 übernommen und jediglich das std:: überall weggenommen(da using namespace std;)<br />
auch den code zum laden und speichern hab ich genauso übernommen(natürlich mit anderen namen eingesetzt)<br />
jetzt hab ich halt immernoch das problem das in dem aus der geladenen datei die strings im deque zt. fehlerhaft oder leer sind, welches bei dem vom programm in der laufzeit selber generierte deque funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447725</guid><dc:creator><![CDATA[staxx]]></dc:creator><pubDate>Fri, 01 Feb 2008 17:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to stack&amp;lt;string&amp;gt; mit fstream speichern on Sun, 03 Feb 2008 10:45:52 GMT]]></title><description><![CDATA[<p>hinzuzufügen wäre vielleicht noch das auf den deque bei meinen tests ca. 1000-2000 einträge kommen. eigentlich denk ich mir das das egal sein müsste, aber vielleicht ist es das ja doch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1448406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1448406</guid><dc:creator><![CDATA[staxx]]></dc:creator><pubDate>Sun, 03 Feb 2008 10:45:52 GMT</pubDate></item></channel></rss>