Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 矢量的Boost.Serialize错误<;综合体>;_C++_Serialization_Boost_Vector_Complex Numbers - Fatal编程技术网

C++ 矢量的Boost.Serialize错误<;综合体>;

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/

我试图使用boost的默认序列化功能,但是我没有成功地序列化一个复杂的向量。我试过这个:

#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