2011-10-18 15 views
0

ブーストシリアル化ライブラリをテストするための小さなサンプルを作成しましたが、コンパイルの問題があります。ブーストシリアル化のコンパイルエラー

まず第一に、ここでのコードは次のとおりです。

#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); 

エラーは次のとおりです。

'iixml >> boost::serialization::make_nvp(const char*, T&) [with T=MyClass(((MyClass&)(&d)))]'operator>>ための一致なしあなたはこの意味について任意のアイデアを持っていますか?

答えて

1

dbPathが定義されていないようです。さらに、ooxml/iixmlの宣言が正しくないように見えます。

次の操作を実行するようにコードを修正してみてください。どちらか、私はNVP(名前と値のペアが)(iixmlとIE)を読み込むためのサポートされていないと思う...

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); 
+0

ええ、コピー/貼り付け時にその部分を忘れましたが、コード内で定義されていました。他の部分に関しては、私はすでにその方法でそれを変更し、それが正しい解決策であることを知ったが、違いがどちらであるか分からない... – cpl

0

>を&を使用します(代わりに>)またはiixml >> d;