Qt在简单实现时提升序列化编译错误

时间:2015-03-04 19:04:41

标签: boost g++

平台细节: Fedora 21 g ++ 4.9.2-6

这是错误......

$ g++ -c kabi-serial.cpp -lboost_serialization
kabi-serial.cpp: In function ‘void boost::serialization::kb_write_list()’:
kabi-serial.cpp:41:13: error: expected ‘;’ before ‘oa’
   serialize oa(ofs);

kabi-serial.cpp:41:20: error: statement cannot resolve address of overloaded function
   serialize oa(ofs);
                ^
kabi-serial.cpp:42:3: error: ‘oa’ was not declared in this scope
   oa << ql;

这里是kabi-serial.cpp源...

#include <boost/serialization/vector.hpp>
#include <vector>

namespace boost {
namespace serialization {

class Cqnodelist
{
public:
     friend class boost::serialization::access;
     Cqnodelist(){}
     std::vector<int>qnodelist;

     template<class Archive>
     void serialize(Archive & ar, const unsigned int version)
     {
         ar & qnodelist;
     }
 };

 void kb_write_list ()
 {
     Cqnodelist ql;

     ofstream ofs("kabi-list.dat");
     {
         serialize oa(ofs);
         oa << ql;
     }
 }
 }
 }

我将源代码基于最简单的序列化示例,除了使用stl向量对象的序列化。

我确定它很简单,但我错过了什么?

1 个答案:

答案 0 :(得分:1)

要使用ofstream,您需要添加<fstream>

ofstream位于名称空间std中:std::ofstream

您不需要将代码放在boost::serialization命名空间内(除非您实现类serialize()函数的外部实例)。

添加serialize方法实现了加载和保存对象属性的方法。 要实际存储或加载数据,您需要选择存储 - 以Boost.Serialization术语存档。

#include <boost/serialization/vector.hpp>

// include headers that implement a archive in simple text format
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <vector>
#include <fstream> // required for std::ofstream

class Cqnodelist
{
public:
    friend class boost::serialization::access;
    Cqnodelist(){}
    std::vector<int>qnodelist;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & qnodelist;
    }
};

void kb_write_list ()
{
    Cqnodelist ql;

    // fill object with data
    ql.qnodelist.push_back(1);
    ql.qnodelist.push_back(2);
    ql.qnodelist.push_back(3);

    // See http://www.boost.org/doc/libs/1_57_0/libs/serialization/doc/tutorial.html
    // for reference

    // save data to archive
    {
       // open file that will contain serialized data
       std::ofstream ofs("kabi-list.dat");

       // create archive on top of opened file
       boost::archive::text_oarchive oa(ofs);
       // write class instance to archive
       oa << ql;
    }

    // to load object later open file, create input archive on top of opened
    // file and load object state
    {
       Cqnodelist new_ql;

       // create and open an archive for input
       std::ifstream ifs("kabi-list.dat");
       boost::archive::text_iarchive ia(ifs);
       // read class state from archive
       ia >> new_ql;
    }
}

int main()
{
    kb_write_list();
}