1

このコードをコンパイルすると、非常に奇妙なエラーが発生します。

#ifndef packetint_h
#define packetint_h
#include "../packet.h"


class packetInt: public packet{
public:
    packetInt(int pLength);
    ~packetInt();
    double distance(packet* destPacket);
    friend class boost::serialization::access;
    template<typename Archive>  void save(Archive& ar, const unsigned version) {

        ar << boost::serialization::base_object<const packet>( *this);
        for(int i = 0; i<getLength(); i++)
            ar << ((int*)data)[i];
    }
    template<typename Archive>  void load(Archive& ar, const unsigned version) {
        std::cout<<"test"<<std::endl;
        ar >> boost::serialization::base_object<packet>(* this);
        data = new int[getLength()];
        for(int i = 0; i<getLength(); i++)
            ar >> ((int*)data)[i];
    }
    BOOST_SERIALIZATION_SPLIT_MEMBER()
};

class packetIntGenome: public packetGenome{
public:
    packetIntGenome(int pLength);
    ~packetIntGenome();
};
#endif

コンパイルするとき

C:\Users\griever\Progetti\Daana\trunk\dependencies\boost\boost/serialization/access.hpp(93): error C2662: 'void packetInt::save<Archive>(Archive &,const unsigned int)': impossibile convertire il puntatore 'this' da 'const packetInt' a 'packetInt &'
1>          with
1>          [
1>              Archive=boost::archive::text_oarchive
1>          ]
1>          La conversione comporta la perdita dei qualificatori

理由はわかりませんが、削除します

 BOOST_SERIALIZATION_SPLIT_MEMBER()

コンパイルエラーを修正します(ただし、コードは機能しません)

私の悪い英語でごめんなさい、私はイタリア人です:D

編集:

深く這う私は問題を見つけました、それでも解決策はありません

BOOST_SERIALIZATION_SPLIT_MEMBER() 
template<typename Archive>                                          
    void serialize(Archive &ar,const unsigned int file_version){                                                              
        boost::serialization::split_member(ar, *this, file_version); <--- this is not working
    } 
4

1 に答える 1

1

コメントに基づいています。この問題を解決するには、saveメソッドを定数として宣言する必要があります。

template<typename Archive> void save(Archive& ar, const unsigned version) const {
  // ...
}

したがって、メソッド内で使用されるすべてのメソッドsaveも一定である必要があります。

于 2013-02-12T12:37:11.387 に答える