C++ 矢量的Boost.Serialize错误<;综合体>;
我试图使用boost的默认序列化功能,但是我没有成功地序列化一个复杂的向量。我试过这个:C++ 矢量的Boost.Serialize错误<;综合体>;,c++,serialization,boost,vector,complex-numbers,C++,Serialization,Boost,Vector,Complex Numbers,我试图使用boost的默认序列化功能,但是我没有成功地序列化一个复杂的向量。我试过这个: #include <fstream> #include <complex> #include <vector> #include <boost/archive/text_oarchive.hpp> #include <boost/serialization/vector.hpp> #include <boost/serialization/
#include <fstream>
#include <complex>
#include <vector>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/complex.hpp>
using namespace std;
typedef complex<double> type;
template<class Archive>
void serialize(Archive& ar, vector<type>& objs, const unsigned version) {
ar & objs;
}
int main(){
vector<type> r;
r.push_back(1.3);
r.push_back(12.12);
r.push_back(-31.05);
ofstream ofs("test.txt");
boost::archive::text_oarchive oa(ofs);
oa & r;
return 0;
}
然后一切正常。我想不出一个解决办法。有什么帮助吗
谢谢
Jan仅作总结并标记为回答:
问题似乎出在VisualStudio2012的Boost1.54实现上,因为据报告g++版本的代码工作正常。感谢@DieterLücking测试我的代码并为我指明了正确的方向。lol-而不是说: 问题似乎出在VisualStudio2012的Boost1.54实现上,因为据报告g++版本的代码工作正常 我想说: 问题似乎出在Visual Studio 2012上,因为据报告代码的g++版本工作正常
Rbert Ramey请不要这样做“#定义复杂类型”-最好是定义复杂类型@DieterLücking你当然是对的,但我只是抛出了一个快速代码来强调双重和复杂行为之间的区别。不知怎的,当我写它的时候,它看起来更明确了——现在我不知道为什么我会这样想。顺便说一句:代码工作得很好。输出文件包含:“22 serialization::archive 9 0 0 3 0 1.3 0 12.11999999999 0-31.05000000000001 0”Hmmmm。。。在这种情况下,它可能与我的设置有关。我使用了VS 2012的预编译版本boost。我想那是一个否定的否定,我将不得不自己编译它。谢谢嗯,我原以为就是这样,但我在另一台计算机上尝试了,我自己编译了boost,得到的只是一个空文件。所以我想知道,DITEL L,你用Visual C++ 2012编译了我的测试代码,或者是其他东西,也许是GCC?因为它可能是一个助推bug。
typedef double type