But I've already tried that, as I
said. It fails at runtime with an exception saying "unregistered void
cast". I'll test it once more, but I don't expect different
results.
On Thu, Apr 2, 2009 at
10:07 PM, Robert Ramey <
ramey@rrsd.com> wrote:
Look at the pimple demo in the
examples or test directory. Basically you're getting some things
defined twiice.
Move the implementation of template< class Archive >
void serialize( Archive& archive, unsigned int version ) to the
*.cpp
and
move
BOOST_CLASS_EXPORT( rs::StaticText )
to the *.cpp file as well. compile
that/those *.cpp files and include in the library. This is touched upon in
the manual in the part describing EXPORT.
Robert Ramey
"Robert
Dailey" <
rcdailey@gmail.com> wrote in message
news:496954360904021720o79c9c17cs18b1cf3f53da08c@mail.gmail.com...
Hi,
I'm currently trying to polymorphically
serialize a class without using RTTI. I'm doing this currently in a file
called StaticText.hpp:
#ifndef
RS_GUI_WIDGETS_STATICTEXT_HPP
#define
RS_GUI_WIDGETS_STATICTEXT_HPP
#include
<boost/scoped_ptr.hpp>
#include
<boost/serialization/access.hpp>
#include
<boost/serialization/base_object.hpp>
#include
<boost/serialization/string.hpp>
#include
<boost/serialization/extended_type_info_no_rtti.hpp>
#include <boost/serialization/export.hpp>
#include <rs/gui/widgets/Widget.hpp>
#include
<rs/gui/Text.hpp>
namespace
rs
{
class StaticText : public
Widget
{
public:
StaticText(
std::string const& text );
void Update();
void
Render( RenderSystem& renderer, Camera& camera );
char const* get_key() const;
private:
StaticText() {}
template< class Archive >
void serialize( Archive& archive, unsigned int version
)
{
archive &
boost::serialization::base_object<Widget>( *this
);
std::string text;
archive & text;
m_text.reset( new Text( text ) );
}
boost::scoped_ptr<Text> m_text;
friend class
boost::serialization::access;
};
}
BOOST_CLASS_TYPE_INFO(
rs::StaticText,
extended_type_info_no_rtti<rs::StaticText>
)
BOOST_CLASS_EXPORT( rs::StaticText
)
#endif //
RS_GUI_WIDGETS_STATICTEXT_HPP
When I compile this into a
LIB first, and then link the lib into an EXE, the linker says this (Visual
Studio 2008):
gui.lib(StaticText.obj) : error LNK2005:
"public: static struct boost::archive::detail::guid_initializer<class
rs::StaticText> const & const
boost::archive::detail::init_guid<class
rs::StaticText>::guid_initializer"
(?guid_initializer@?$init_guid@VStaticText@rs@@@detail@archive@boost@@2ABU?$guid_initializer@VStaticText@rs@@@234@B)
already defined in main.obj
If I move the 2 macro
calls into the StaticText.cpp file, everything compiles/links just fine
but I end up getting an exception thrown at runtime that says
"unregistered void cast".
________________________________
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users mailing
list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users_______________________________________________
Boost-users
mailing list
Boost-users@lists.boost.orghttp://lists.boost.org/mailman/listinfo.cgi/boost-users