Boost logo

Boost Users :

From: John Pye (john.pye_at_[hidden])
Date: 2007-04-25 09:18:59


Hi all,

I have some trouble with the Boost.Serialization library. I have
compiled the 'demo.cpp' example, and now I am trying to distill it a
little, so that I can understand how to apply it to my own polymorphic
class hierarchy. However I keep seeing the same error message, and can't
work out what it means.

In /usr/include/boost/archive/detail/oserializer.hpp:567 there are some
comments about the error message I'm seeing but I don't understand what
those comments mean. I'm using Boost 1.33.1-7ubuntu1 on Ubuntu 6.10.

Any help would be much appreciated!

Cheers
JP

Here is the error message:
--------------8<---------------
jpye_at_john:~/boosttest$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o ser1.o -c ser1.cpp
/usr/include/boost/archive/detail/oserializer.hpp: In function 'void
boost::archive::save(Archive&, T&) [with Archive =
boost::archive::text_oarchive, T = dd]':
/usr/include/boost/archive/basic_text_oarchive.hpp:78: instantiated
from 'void
boost::archive::basic_text_oarchive<Archive>::save_override(T&, int)
[with T = dd, Archive = boost::archive::text_oarchive]'
/usr/include/boost/archive/detail/interface_oarchive.hpp:78:
instantiated from 'Archive&
boost::archive::detail::interface_oarchive<Archive>::operator<<(T&)
[with T = dd, Archive = boost::archive::text_oarchive]'
ser1.cpp:43: instantiated from here
/usr/include/boost/archive/detail/oserializer.hpp:567: error: invalid
application of 'sizeof' to incomplete type
'boost::STATIC_ASSERTION_FAILURE<false>'
scons: *** [ser1.o] Error 1
scons: building terminated because of errors.
jpye_at_john:~/boosttest$
--------------------------------------

Here is the code that was being compiled:
-----------------8<---------------
jpye_at_john:~/boosttest$ cat ser1.cpp
#include <iomanip>
#include <iostream>
#include <fstream>
#include <string>

#include <boost/archive/tmpdir.hpp>

#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

#include <boost/serialization/base_object.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/list.hpp>

class dd{
            friend std::ostream&operator<<(std::ostream&,const dd&);
            friend class boost::serialization::access;
            double x,y;
            template<class Archive>
            void serialize(Archive & ar, const unsigned int /*
file_version */){
                ar & y & x;
            }
        public:
            // every serializable class needs a constructor
            dd(){};
            dd(double x, double y) : x(x), y(y) {}
};
std::ostream & operator<<(std::ostream &os, const dd &d)
{
    return os << d.x << ' ' << d.y;
}

int main(int argc, char *argv[]){

        dd D(10,20);
        int x = 5;

        std::cerr << D << std::endl;
   
    std::ofstream ofs("test.txt");
    boost::archive::text_oarchive oa(ofs);
    oa << x;
        oa << D;

    return 0;
}
--------------------------------------

And, just for completeness, my build file:
--------------8<----------------
jpye_at_ascendserver:~/boosttest$ cat SConstruct

Program("test",["ser1.cpp"], LIBS=['boost_serialization'])
------------------------------------


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net