Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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++ 使用映射增强二进制序列化,并在中序列化时加倍崩溃_C++_Serialization_Boost_Map_Boost Serialization - Fatal编程技术网

C++ 使用映射增强二进制序列化,并在中序列化时加倍崩溃

C++ 使用映射增强二进制序列化,并在中序列化时加倍崩溃,c++,serialization,boost,map,boost-serialization,C++,Serialization,Boost,Map,Boost Serialization,这是一个代表我问题的示例。除非finalTime大于25,否则映射将完全序列化。通过boost单元测试,我得到了一个std::exception输入流错误。此外,该代码使用多态文本归档也可以很好地工作。读取地图时出错 #include <fstream> #include <iostream> #define BOOST_ALL_DYN_LINK #define BOOST_PARAMETER_MAX_ARITY 8 #include <boost/serializ

这是一个代表我问题的示例。除非finalTime大于25,否则映射将完全序列化。通过boost单元测试,我得到了一个std::exception输入流错误。此外,该代码使用多态文本归档也可以很好地工作。读取地图时出错

#include <fstream>
#include <iostream>
#define BOOST_ALL_DYN_LINK
#define BOOST_PARAMETER_MAX_ARITY 8
#include <boost/serialization/export.hpp>
#include <boost/archive/polymorphic_iarchive.hpp>
#include <boost/archive/polymorphic_oarchive.hpp>
#include <boost/archive/polymorphic_binary_iarchive.hpp>
#include <boost/archive/polymorphic_binary_oarchive.hpp>
#include <boost/static_assert.hpp>
#include <boost/serialization/map.hpp>

using namespace boost;

class DoubleTest
{
public:
    DoubleTest(double d)
    {
        this->Double = d;
    }

    DoubleTest()
    {
        this->Double = 0;
    }

    void serialize(boost::archive::polymorphic_iarchive & ar, const unsigned int)
    {
        ar & this->Double;
    }

    void serialize(boost::archive::polymorphic_oarchive & ar, const unsigned int)
    {
        ar & this->Double;
    }

    double Double;
};

int main(int argc, char** argv)
{
    const std::string fileName = "test.out";
    std::map<float, DoubleTest*> mymap;

    const int initialValue = 0;
    const int initialTime = 0;

    // A "finalTime" of 25 works. "26" does not.
    const int finalTime = 26;
    int value = 10;

    // Put values into the map.
    for(int time = initialTime; time < finalTime; time += 1)
    {
        value++;
        mymap[time] = new DoubleTest(value);
    }

    // Write a binary archive out.
    std::ofstream ofs(fileName.c_str());
    boost::archive::polymorphic_binary_oarchive oa(ofs);
    oa << mymap;
    ofs.flush();
    ofs.close();

    // Create a new map to read the binary archive into.
    std::map<float, DoubleTest*> mymap2;

    // Read in the new binary archive.
    std::ifstream ifs(fileName.c_str());
    boost::archive::polymorphic_binary_iarchive ia(ifs);
    ia >> mymap2;
    ifs.close();

    // Loop through the values to make sure they are correct.
    std::map<float, DoubleTest*>::iterator it; 
    for(it = mymap2.begin(); it != mymap2.end(); ++it)
    {
        std::cout << "Key: " << it->first << " ";
        std::cout << "Value: " << it->second->Double << '\n';
    }

    int pause;
    std::cin >> pause;
}
#包括
#包括
#定义BOOST\u ALL\u DYN\u链接
#定义增压参数最大值8
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间boost;
类双重测试
{
公众:
双重测试(双d)
{
这个->双=d;
}
双重测试()
{
这个->双=0;
}
void serialize(boost::archive::polymorphic_iarchive&ar,const unsigned int)
{
ar&this->Double;
}
void serialize(boost::archive::polymorphic_oarchive&ar,const unsigned int)
{
ar&this->Double;
}
双倍;
};
int main(int argc,字符**argv)
{
const std::string fileName=“test.out”;
std::map mymap;
常量int initialValue=0;
常量int initialTime=0;
//“最后时刻”是25件作品,“26件”不是。
常数int finalTime=26;
int值=10;
//将值放入地图中。
for(int time=initialTime;timemymap2;
ifs.close();
//循环检查这些值以确保它们是正确的。
std::map::it迭代器;
for(it=mymap2.begin();it!=mymap2.end();+it)
{

std::cout您需要序列化为二进制文件流。将ios\u base::binary添加到流构造函数。

您需要序列化为二进制文件流。将ios\u base::binary添加到流构造函数