所以我试图序列化我的类最近使用boost :: serialization,并阅读本教程:http://en.highscore.de/cpp/boost/serialization.html。 我可以编译这个页面的代码,但我不能编译我自己编写的代码。例如在部分“类层次的序列化对象”我们有这样的代码:升压序列化错误C4308:负积分常数转换为无符号类型
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
#include <iostream>
#include <sstream>
#include <string>
std::stringstream ss;
class person
{
public:
person()
{
}
person(int age)
: age_(age)
{
}
int age() const
{
return age_;
}
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & age_;
}
int age_;
};
class developer
: public person
{
public:
developer()
{
}
developer(int age, const std::string &language)
: person(age), language_(language)
{
}
std::string language() const
{
return language_;
}
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & boost::serialization::base_object<person>(*this);
ar & language_;
}
std::string language_;
};
void save()
{
boost::archive::text_oarchive oa(ss);
developer d(31, "C++");
oa << d;
}
void load()
{
boost::archive::text_iarchive ia(ss);
developer d;
ia >> d;
std::cout << d.age() << std::endl;
std::cout << d.language() << std::endl;
}
int main()
{
save();
load();
}
,它工作正常,但可以说,我写了这个代码:
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/export.hpp>
#include <iostream>
#include <fstream>
#include <boost/serialization/string.hpp>
#include <string>
class A
{
friend class boost::serialization::access;
public:
std::string a;
private:
template<class Archive>
void serialize(Archive& archive, const unsigned int version)
{
archive & a;
}
};
class B : public A
{
friend class boost::serialization::access;
public:
std::string b;
private:
template<class Archive>
void serialize(Archive& archive, const unsigned int version)
{
archive & boost::serialization::base_object<A>(*this);
archive & b;
}
};
BOOST_CLASS_EXPORT(B)
void save()
{
std::ofstream file("archive.xml");
boost::archive::xml_oarchive oa(file);
B *myB = new B();
myB->a = "1";
myB->a = "2";
oa << myB;
delete myB;
file.close();
}
void load()
{
std::ifstream file("archive.xml");
boost::archive::xml_iarchive ia(file);
A *myB;
ia >> myB;
std::cout << myB->a << std::endl;
}
int main()
{
save();
load();
std::cin.get();
}
当我编译此,我得到这个错误:
error C4308: negative integral constant converted to unsigned type c:\program files\boost_1_55_0\boost\mpl\print.hpp
你能告诉我我做错了什么吗?
今天我才知道:如果MSVC给人以'错误C4308 '顶级错误,这可能意味着'BOOST_STATIC_WARNING'在模板实例化中被触发。 – sehe 2014-10-28 19:32:27