<?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[boost::serialization Fehler, static assertion beschwert sich über konstante Objekte]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich arbeite momentan an einem neuen Projekt, und brauche für eine Klasse eine Serialisierung. Diese führe ich mit der entsprechenden Boost-Bibliothek durch; allerdings gibt es einen Fehler, den ich mir so nicht erklären kann:</p>
<pre><code class="language-cpp">for(auto &amp;pair : mPositions)
{
       ar &amp; pair.first; //Hier
       //...
}
</code></pre>
<p><code>mPositions</code> ist folgendermaßen deklariert:</p>
<pre><code class="language-cpp">std::unordered_multimap&lt;std::string, Ogre::Vector3&gt; mPositions;
</code></pre>
<p><code>ar</code> ist hierbei das I/O-Archiv.</p>
<p>Wenn ich die Zeile auskommentiere, kompiliert es (aber natürlich muss ich den String mit serialisieren). Die gesamte Fehlermeldung sieht so aus:</p>
<p>Codeblocks Log (GCC) schrieb:</p>
<blockquote>
<p>C:\C++LIBRARIES\Boost\boost\archive\detail\iserializer.hpp:577|5|instantiated from 'void boost::archive::load(Archive&amp;, T&amp;) [with Archive = boost::archive::text_iarchive, T = const std::basic_string&lt;char&gt;]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\common_iarchive.hpp:66|9|instantiated from 'void boost::archive::detail::common_iarchive&lt;Archive&gt;::load_override(T&amp;, int) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\basic_text_iarchive.hpp:65|9|instantiated from 'void boost::archive::basic_text_iarchive&lt;Archive&gt;::load_override(T&amp;, int) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\text_iarchive.hpp:82|9|instantiated from 'void boost::archive::text_iarchive_impl&lt;Archive&gt;::load_override(T&amp;, int) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\interface_iarchive.hpp:60|9|instantiated from 'Archive&amp; boost::archive::detail::interface_iarchive&lt;Archive&gt;::operator&gt;&gt;(T&amp;) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\interface_iarchive.hpp:67|35|instantiated from 'Archive&amp; boost::archive::detail::interface_iarchive&lt;Archive&gt;::operator&amp;(T&amp;) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
<strong>C:\Users\Documents\C(++) Saves\Ogre\CheckBounce\Level.hxx:37|25|instantiated from 'void Level::serialize(Archive&amp;, unsigned int) [with Archive = boost::archive::text_iarchive]'|</strong><br />
C:\C++LIBRARIES\Boost\boost\serialization\access.hpp:118|9|instantiated from 'static void boost::serialization::access::serialize(Archive&amp;, T&amp;, unsigned int) [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\C++LIBRARIES\Boost\boost\serialization\serialization.hpp:69|5|instantiated from 'void boost::serialization::serialize(Archive&amp;, T&amp;, unsigned int) [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\C++LIBRARIES\Boost\boost\serialization\serialization.hpp:128|9|instantiated from 'void boost::serialization::serialize_adl(Archive&amp;, T&amp;, unsigned int) [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\iserializer.hpp:188|5|instantiated from 'void boost::archive::detail::iserializer&lt;Archive, T&gt;::load_object_data(boost::archive::detail::basic_iarchive&amp;, void*, unsigned int) const [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\Users\Documents\C(++) Saves\Ogre\CheckBounce\Level.cxx:25|1|instantiated from here|<br />
<strong>C:\C++LIBRARIES\Boost\boost\archive\detail\check.hpp|162|error: static assertion failed: &quot;typex::value&quot;|</strong></p>
</blockquote>
<p>Zeile 37 ist die oben Markierte Zeile ( <code>//Hier</code> ).<br />
Die Stelle mit der fehlschlagenden assertion sieht so aus:</p>
<pre><code class="language-cpp">// cannot load data into a &quot;const&quot; object unless it's a
    // wrapper around some other non-const object.
    BOOST_STATIC_ASSERT(typex::value); Assertion
</code></pre>
<p>Der Comment darüber stellt also offensichtlich den Fehler dar (den ich wunderbar nachvollziehen kann). Aber was genau ist hier denn <code>const</code> ?</p>
<p>Danke im Voraus,</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305303/boost-serialization-fehler-static-assertion-beschwert-sich-über-konstante-objekte</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 07:36:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305303.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Jun 2012 21:32:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Mon, 02 Jun 2014 18:02:48 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich arbeite momentan an einem neuen Projekt, und brauche für eine Klasse eine Serialisierung. Diese führe ich mit der entsprechenden Boost-Bibliothek durch; allerdings gibt es einen Fehler, den ich mir so nicht erklären kann:</p>
<pre><code class="language-cpp">for(auto &amp;pair : mPositions)
{
       ar &amp; pair.first; //Hier
       //...
}
</code></pre>
<p><code>mPositions</code> ist folgendermaßen deklariert:</p>
<pre><code class="language-cpp">std::unordered_multimap&lt;std::string, Ogre::Vector3&gt; mPositions;
</code></pre>
<p><code>ar</code> ist hierbei das I/O-Archiv.</p>
<p>Wenn ich die Zeile auskommentiere, kompiliert es (aber natürlich muss ich den String mit serialisieren). Die gesamte Fehlermeldung sieht so aus:</p>
<p>Codeblocks Log (GCC) schrieb:</p>
<blockquote>
<p>C:\C++LIBRARIES\Boost\boost\archive\detail\iserializer.hpp:577|5|instantiated from 'void boost::archive::load(Archive&amp;, T&amp;) [with Archive = boost::archive::text_iarchive, T = const std::basic_string&lt;char&gt;]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\common_iarchive.hpp:66|9|instantiated from 'void boost::archive::detail::common_iarchive&lt;Archive&gt;::load_override(T&amp;, int) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\basic_text_iarchive.hpp:65|9|instantiated from 'void boost::archive::basic_text_iarchive&lt;Archive&gt;::load_override(T&amp;, int) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\text_iarchive.hpp:82|9|instantiated from 'void boost::archive::text_iarchive_impl&lt;Archive&gt;::load_override(T&amp;, int) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\interface_iarchive.hpp:60|9|instantiated from 'Archive&amp; boost::archive::detail::interface_iarchive&lt;Archive&gt;::operator&gt;&gt;(T&amp;) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\interface_iarchive.hpp:67|35|instantiated from 'Archive&amp; boost::archive::detail::interface_iarchive&lt;Archive&gt;::operator&amp;(T&amp;) [with T = const std::basic_string&lt;char&gt;, Archive = boost::archive::text_iarchive]'|<br />
<strong>C:\Users\Documents\C(++) Saves\Ogre\CheckBounce\Level.hxx:37|25|instantiated from 'void Level::serialize(Archive&amp;, unsigned int) [with Archive = boost::archive::text_iarchive]'|</strong><br />
C:\C++LIBRARIES\Boost\boost\serialization\access.hpp:118|9|instantiated from 'static void boost::serialization::access::serialize(Archive&amp;, T&amp;, unsigned int) [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\C++LIBRARIES\Boost\boost\serialization\serialization.hpp:69|5|instantiated from 'void boost::serialization::serialize(Archive&amp;, T&amp;, unsigned int) [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\C++LIBRARIES\Boost\boost\serialization\serialization.hpp:128|9|instantiated from 'void boost::serialization::serialize_adl(Archive&amp;, T&amp;, unsigned int) [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\C++LIBRARIES\Boost\boost\archive\detail\iserializer.hpp:188|5|instantiated from 'void boost::archive::detail::iserializer&lt;Archive, T&gt;::load_object_data(boost::archive::detail::basic_iarchive&amp;, void*, unsigned int) const [with Archive = boost::archive::text_iarchive, T = Level]'|<br />
C:\Users\Documents\C(++) Saves\Ogre\CheckBounce\Level.cxx:25|1|instantiated from here|<br />
<strong>C:\C++LIBRARIES\Boost\boost\archive\detail\check.hpp|162|error: static assertion failed: &quot;typex::value&quot;|</strong></p>
</blockquote>
<p>Zeile 37 ist die oben Markierte Zeile ( <code>//Hier</code> ).<br />
Die Stelle mit der fehlschlagenden assertion sieht so aus:</p>
<pre><code class="language-cpp">// cannot load data into a &quot;const&quot; object unless it's a
    // wrapper around some other non-const object.
    BOOST_STATIC_ASSERT(typex::value); Assertion
</code></pre>
<p>Der Comment darüber stellt also offensichtlich den Fehler dar (den ich wunderbar nachvollziehen kann). Aber was genau ist hier denn <code>const</code> ?</p>
<p>Danke im Voraus,</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227203</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 02 Jun 2014 18:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Mon, 25 Jun 2012 21:53:29 GMT]]></title><description><![CDATA[<p>Der value_type einer map (sowie auch unordered_map) lautet pair&lt;const key_type,mapped_type&gt;, damit der Key eines Elements in einer Map nicht geändert werden kann. Siehe <a href="http://www.cplusplus.com/reference/stl/unordered_map/" rel="nofollow">STL-Referenz</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227209</guid><dc:creator><![CDATA[ananas]]></dc:creator><pubDate>Mon, 25 Jun 2012 21:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Mon, 25 Jun 2012 22:14:46 GMT]]></title><description><![CDATA[<p>ananas schrieb:</p>
<blockquote>
<p>Der value_type einer map (sowie auch unordered_map) lautet pair&lt;const key_type,mapped_type&gt;, damit der Key eines Elements in einer Map nicht geändert werden kann. Siehe <a href="http://www.cplusplus.com/reference/stl/unordered_map/" rel="nofollow">STL-Referenz</a>.</p>
</blockquote>
<p>Ouh, also ein Design Fehler. Danke.<br />
Jetzt wo es mir auffällt...wie kann man eigentlich Arrays serialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227212</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 25 Jun 2012 22:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Tue, 26 Jun 2012 07:49:50 GMT]]></title><description><![CDATA[<p>Lies mal die Doku, man. Da steht sowohl was zu Arrays drin, als auch dazu, wie man STL-Collections serialisiert. Unter anderem wirst Du dann sehen, dass es <code>&lt;boost/serialization/map.hpp&gt;</code> gibt, mit dem man auch Multimaps bearbeiten kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227244</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 26 Jun 2012 07:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Tue, 26 Jun 2012 07:54:48 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Lies mal die Doku, man. Da steht sowohl was zu Arrays drin, als auch dazu, wie man STL-Collections serialisiert. Unter anderem wirst Du dann sehen, dass es <code>&lt;boost/serialization/map.hpp&gt;</code> gibt, mit dem man auch Multimaps bearbeiten kann.</p>
</blockquote>
<p>Hab ich nicht zu Ende gelesen, stimmt... Danke <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/2227247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227247</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 26 Jun 2012 07:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Tue, 26 Jun 2012 12:08:50 GMT]]></title><description><![CDATA[<p>Es geht jetzt, nur musste ich einen Wrapper um eine Klasse ( <code>Ogre::Vector3</code> ) schreiben, die natürlich keine entsprechende <code>serialize</code> -Methode hat. Geht das auch anders? Oder soll ich das gleich in die Klassendefinition reinschreiben?</p>
<p>(<a href="http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html" rel="nofollow">Das Tutorial</a> sagt nix).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227340</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 26 Jun 2012 12:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Tue, 26 Jun 2012 13:08:38 GMT]]></title><description><![CDATA[<p>RTFM.<br />
Du willst <a href="http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html#nonintrusiveversion" rel="nofollow">nonintrusive</a> und vermutlich auch <a href="http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html#splitting" rel="nofollow">splitting into load/save</a>...</p>
<p>Wozu brauchst Du das überhaupt? Ogre kann doch selbst serialisieren und deserialiseren?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227351</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 26 Jun 2012 13:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to boost::serialization Fehler, static assertion beschwert sich über konstante Objekte on Tue, 26 Jun 2012 15:24:08 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>RTFM.<br />
Du willst nonintrusive</p>
</blockquote>
<p>Danke, ja das wollt' ich <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>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Wozu brauchst Du das überhaupt? Ogre kann doch selbst serialisieren und deserialiseren?!</p>
</blockquote>
<p>Mir geht es darum, dass ich ein Level &quot;serialisieren&quot; kann; Es sollen also die Namen von Meshes (es ist festgelegt, welche Namen für welche Meshes stehen und welche Meshes das sind) und deren Position/Rotation Gespeichert werden.</p>
<p>Das Ogre überhaupt Serialisierung unterstützt, wusste ich nicht (ich kenne nur Mesh&amp;Material -serializer, die für mich nicht wichtig sind). So (mit meiner Serialisierung) ist es aber für mich einfacher, weil nur eine Begrenzte Menge an Daten gebraucht wird( z. B. nicht Skalierung), somit würde dann wahrscheinlich Redundanz auftreten... das ist meine Überlegung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227428</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 26 Jun 2012 15:24:08 GMT</pubDate></item></channel></rss>