1

ブーストのサンプルコードを使用して、オブジェクトのポインターのベクトルをファイルに格納しています。私のベクトルは:

class VOMC{
public:
    vector<State*> vomc;
...
...
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & vomc;
    }
}

これにより、次のエラーが発生します(他にもいくつかあります)。

/usr/local/include/boost/serialization/access.hpp:118:9: error: ‘class State’ has no member named ‘serialize’

エラーが発生するのは、Stateオブジェクトもシリアル化可能にする必要があることを示している可能性があります(そのオブジェクトについてはわかりません)。さらに、ポインタ(メモリへのアドレス)を格納しても実際のデータは格納されないため、混乱します。実際のデータは、プログラムの終了時に解放されます。上記の状況の回避策はありますか?ブーストなしでも。

4

1 に答える 1

2

クラスserializeのメソッドが必要です。State

http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html

配列ストップの各メンバーはシリアル化されます。しかし、各メンバーがポインターであることを忘れないでください-それで、これは本当に何を意味するのでしょうか?このシリアル化の全体的な目的は、別の場所と時間で元のデータ構造を再構築できるようにすることです。ポインタを使用してこれを実現するには、ポインタの値を保存するだけでは不十分であり、ポインタが指すオブジェクトを保存する必要があります。後でメンバーをロードするときは、新しいオブジェクトを作成し、新しいポインターをクラスメンバーにロードする必要があります。

また、ポインタのシリアル化について読む必要があると思います

于 2012-09-05T14:34:53.207 に答える