Ошибка компиляции при ускоренной сериализации

Я создал небольшой образец для тестирования библиотеки сериализации boost, но у меня возникла проблема с компиляцией.

Прежде всего, вот код:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <boost/filesystem/operations.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/version.hpp>

std::vector<uint8_t> buf;

class MyClass
{
public:
    MyClass(){};
    virtual ~MyClass(){};

    int assetStatus;

    friend class boost::serialization::access;

    template<typename Archive> void serialize(
        Archive & ar,
        const unsigned int version)
    {
        ar & BOOST_SERIALIZATION_NVP(assetStatus);
    }

    std::string ToString()
    {
        std::string toret;
        toret += " assetStatus: " + assetStatus;

        return toret;
    }
};

int main()
{
    MyClass a, b;
    a.assetStatus = 10;

    std::cout << a.ToString();

    boost::archive::xml_oarchive ooxml(std::ofstream(dbPath));
    ooxml << BOOST_SERIALIZATION_NVP(a); // error here

    MyClass d;
    boost::archive::xml_iarchive iixml(std::ifstream(dbPath));
    iixml >> BOOST_SERIALIZATION_NVP(d); // error here
    std::cout << d.ToString();
}

Я получаю ошибку компиляции в строках:

ooxml << BOOST_SERIALIZATION_NVP(a);

а также

iixml >> BOOST_SERIALIZATION_NVP(d);

Ошибка:

нет совпадений для operator>> в 'iixml >> boost::serialization::make_nvp(const char*, T&) [with T=MyClass(((MyClass&)(&d)))]'

У вас есть какое-нибудь представление о значении этого?


person cpl    schedule 18.10.2011    source источник


Ответы (2)


Похоже, dbPath не определен. Кроме того, объявление ooxml/iixml выглядит некорректным.

Попробуйте изменить свой код, чтобы сделать следующее: ...

const char * dbPath = "file.xml"

std::ofstream ofs(dbPath);
boost::archive::xml_oarchive ooxml(ofs);
ooxml << BOOST_SERIALIZATION_NVP(a); 

std::ifstream ifs(dbPath);
boost::archive::xml_iarchive iixml(ofs);
iixml >> BOOST_SERIALIZATION_NVP(d); 
person JoeD    schedule 18.10.2011
comment
Да, я забыл эту часть при копировании/вставке, но она была определена в моем коде. Что касается другой части, я уже изменил ее таким образом и обнаружил, что это было правильное решение, хотя я не могу понять, в чем разница... - person cpl; 19.10.2011

Я думаю, что NVP (пара «имя-значение») не поддерживается для чтения (т. е. с iixml), либо используйте & (вместо >>), либо iixml >> d;

person alfC    schedule 19.10.2011