<?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[Frage zu boost-Bibliothek (Speichern und Laden von Objekten)]]></title><description><![CDATA[<p>Ich würde gerne ein Objekt in eine Datei speichern. Habe mir dazu <a href="http://www.highscore.de/cpp/boost/serialisierung.html" rel="nofollow">dieses</a> Tutorial angeschaut.</p>
<p>Soweit ich es ausprobiert habe, funktioniert das Speichern, aber das Laden nicht so richtig, denn es kommt der Fehler:</p>
<pre><code>terminate called after throwing an instance of 'boost::exception_detail::clone_impl&lt;boost::exception_detail::error_info_injector&lt;boost::archive::archive_exception&gt; &gt;'
  what():  stream error
Aborted
</code></pre>
<p>Ich möchte gerne Objekte meiner Klasser &quot;Uhrzeit&quot; speichern.<br />
Dazu habe ich die Klasse Uhrzeit folgend implementiert:</p>
<pre><code class="language-cpp">#ifndef UHRZEIT_H_
#define UHRZEIT_H_

#include &lt;iostream&gt;
#include &lt;boost/archive/text_oarchive.hpp&gt;
#include &lt;boost/archive/text_iarchive.hpp&gt;
#include &lt;cstdlib&gt;

class Uhrzeit {
public:
	Uhrzeit(int&amp; std_, int&amp; min_) : std(std_), min(min_) {}
	Uhrzeit(const Uhrzeit&amp; rhs) {
		std=rhs.std;
		min=rhs.min;

	}
	Uhrzeit() : std(-1), min(-1) {}

	void set(const int&amp; s, const int&amp; m) {std=s; min=m; }
	void set(const Uhrzeit&amp; u) { std=u.getStd(); min=u.getMin(); }

	int getStd() const { return abs(std); }
	int getMin() const { return abs(min); }

	void clear() { std=-1; min=-1;}
	virtual ~Uhrzeit() { }

private:
	friend class boost::serialization::access;

	template &lt;typename Archive&gt;
	void serialize(Archive &amp;ar, const unsigned int version)
	{
		ar &amp; std;
		ar &amp; min;
	}

	int std;
	int min;

};

inline std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, Uhrzeit&amp; rhs) {

	if(rhs.getStd()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getStd() &lt;&lt; &quot;:&quot; ;
	if(rhs.getMin()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getMin();
	return ostr;
}

inline std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, const Uhrzeit&amp; rhs) {
	if(rhs.getStd()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getStd() &lt;&lt; &quot;:&quot; ;
	if(rhs.getMin()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getMin();
	return ostr;
}

#endif /* UHRZEIT_H_ */
</code></pre>
<p>Ich hoffe, das ist wenigstens richtig serialisiert.</p>
<p>Jetzt speichere ich in einer anderen Klasse ein Objekt der Klasse Uhrzeit in eine Datei.<br />
Das mache ich folgendermaßen:</p>
<pre><code class="language-cpp">/* Erstelle Objekt Uhrzeit, welches in die Datei gespeichert wird */
	int h=14;
	int m=24;

	Uhrzeit u(h, m);
        /* filename ist ein String, der den Pfad zur Datei angibt. */
	fstream f(filename.c_str(), ios::out|ios::binary|ios::trunc);
	boost::archive::text_oarchive oa(f);

	oa &lt;&lt; u;
</code></pre>
<p>Hier kommt keine Fehlermeldung und in der Datei steht folgendes (wenn ich diese im Editor oeffne)</p>
<pre><code>22 serialization::archive 5 0 0 14 24
</code></pre>
<p>Beim Laden ist aber das Problem.</p>
<p>Mein Ladevorgang sieht so aus:</p>
<pre><code class="language-cpp">ifstream f(filename.c_str());

	boost::archive::text_iarchive ia(f);

	Uhrzeit u;

	ia &gt;&gt; u;
</code></pre>
<p>Aber wie gesagt, obiger Fehler erscheint dann.</p>
<p>Kann mir jemand helfen?<br />
In beiden Dateien ist</p>
<pre><code>&lt;boost/archive/text_oarchive.hpp&gt;
</code></pre>
<p>und</p>
<pre><code>&lt;boost/archive/text_iarchive.hpp&gt;
</code></pre>
<p>inkludiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285383/frage-zu-boost-bibliothek-speichern-und-laden-von-objekten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 08:48:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285383.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Apr 2011 12:26:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu boost-Bibliothek (Speichern und Laden von Objekten) on Tue, 19 Apr 2011 12:31:13 GMT]]></title><description><![CDATA[<p>Ich würde gerne ein Objekt in eine Datei speichern. Habe mir dazu <a href="http://www.highscore.de/cpp/boost/serialisierung.html" rel="nofollow">dieses</a> Tutorial angeschaut.</p>
<p>Soweit ich es ausprobiert habe, funktioniert das Speichern, aber das Laden nicht so richtig, denn es kommt der Fehler:</p>
<pre><code>terminate called after throwing an instance of 'boost::exception_detail::clone_impl&lt;boost::exception_detail::error_info_injector&lt;boost::archive::archive_exception&gt; &gt;'
  what():  stream error
Aborted
</code></pre>
<p>Ich möchte gerne Objekte meiner Klasser &quot;Uhrzeit&quot; speichern.<br />
Dazu habe ich die Klasse Uhrzeit folgend implementiert:</p>
<pre><code class="language-cpp">#ifndef UHRZEIT_H_
#define UHRZEIT_H_

#include &lt;iostream&gt;
#include &lt;boost/archive/text_oarchive.hpp&gt;
#include &lt;boost/archive/text_iarchive.hpp&gt;
#include &lt;cstdlib&gt;

class Uhrzeit {
public:
	Uhrzeit(int&amp; std_, int&amp; min_) : std(std_), min(min_) {}
	Uhrzeit(const Uhrzeit&amp; rhs) {
		std=rhs.std;
		min=rhs.min;

	}
	Uhrzeit() : std(-1), min(-1) {}

	void set(const int&amp; s, const int&amp; m) {std=s; min=m; }
	void set(const Uhrzeit&amp; u) { std=u.getStd(); min=u.getMin(); }

	int getStd() const { return abs(std); }
	int getMin() const { return abs(min); }

	void clear() { std=-1; min=-1;}
	virtual ~Uhrzeit() { }

private:
	friend class boost::serialization::access;

	template &lt;typename Archive&gt;
	void serialize(Archive &amp;ar, const unsigned int version)
	{
		ar &amp; std;
		ar &amp; min;
	}

	int std;
	int min;

};

inline std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, Uhrzeit&amp; rhs) {

	if(rhs.getStd()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getStd() &lt;&lt; &quot;:&quot; ;
	if(rhs.getMin()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getMin();
	return ostr;
}

inline std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, const Uhrzeit&amp; rhs) {
	if(rhs.getStd()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getStd() &lt;&lt; &quot;:&quot; ;
	if(rhs.getMin()&lt;10) {
		ostr &lt;&lt; &quot;0&quot;;
	}
	ostr &lt;&lt; rhs.getMin();
	return ostr;
}

#endif /* UHRZEIT_H_ */
</code></pre>
<p>Ich hoffe, das ist wenigstens richtig serialisiert.</p>
<p>Jetzt speichere ich in einer anderen Klasse ein Objekt der Klasse Uhrzeit in eine Datei.<br />
Das mache ich folgendermaßen:</p>
<pre><code class="language-cpp">/* Erstelle Objekt Uhrzeit, welches in die Datei gespeichert wird */
	int h=14;
	int m=24;

	Uhrzeit u(h, m);
        /* filename ist ein String, der den Pfad zur Datei angibt. */
	fstream f(filename.c_str(), ios::out|ios::binary|ios::trunc);
	boost::archive::text_oarchive oa(f);

	oa &lt;&lt; u;
</code></pre>
<p>Hier kommt keine Fehlermeldung und in der Datei steht folgendes (wenn ich diese im Editor oeffne)</p>
<pre><code>22 serialization::archive 5 0 0 14 24
</code></pre>
<p>Beim Laden ist aber das Problem.</p>
<p>Mein Ladevorgang sieht so aus:</p>
<pre><code class="language-cpp">ifstream f(filename.c_str());

	boost::archive::text_iarchive ia(f);

	Uhrzeit u;

	ia &gt;&gt; u;
</code></pre>
<p>Aber wie gesagt, obiger Fehler erscheint dann.</p>
<p>Kann mir jemand helfen?<br />
In beiden Dateien ist</p>
<pre><code>&lt;boost/archive/text_oarchive.hpp&gt;
</code></pre>
<p>und</p>
<pre><code>&lt;boost/archive/text_iarchive.hpp&gt;
</code></pre>
<p>inkludiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051620</guid><dc:creator><![CDATA[Fabulus]]></dc:creator><pubDate>Tue, 19 Apr 2011 12:31:13 GMT</pubDate></item></channel></rss>