2011-08-24 3 views
1

serialization 프로세스 중에 "TestSerialize"클래스에서 메서드를 호출하려고하면 다음과 같은 문제가 있습니다. 나는 발생한 오류가 Boost.Serialization : 직렬화 과정에서 클래스 메서드 호출시 오류가 발생했습니다.

class TestSerialize 
{ 
public: 
    std::string GetVal() { return Val + "abc"; } 
    void SetVal(std::string tVal) { Val = tVal.substr(0, 2); } 

protected: 

    std::string Val; 

    friend class boost::serialization::access; 
    template<class Archive> void save(Archive & ar, const unsigned int version) const 
    { 
     using boost::serialization::make_nvp; 
     std::string tVal = GetVal(); // Error here 
     ar & make_nvp("SC", tVal); 
    } 

    template<class Archive> void load(Archive & ar, const unsigned int version) 
    { 
     using boost::serialization::make_nvp; 
     std::string tVal; 
     ar & make_nvp("SC", tVal); 
     SetVal(tVal); 
    } 
    BOOST_SERIALIZATION_SPLIT_MEMBER(); 
}; 

int main() 
{ 
    TestSerialize tS; 

    std::ofstream ofs("test.xml"); 
    boost::archive::xml_oarchive oa(ofs, boost::archive::no_header); 
    oa << BOOST_SERIALIZATION_NVP(tS); 
    ofs.close(); 

    return 0; 
} 

입니다

: 'TestSerialize :: GETVAL'

'TestSerialize &'에 'const를 TestSerialize'에서 '이'포인터를 변환 할 수 없습니다 여기

내 코드입니다

이 오류는 "저장"하지만 "로드"하지 않는 경우에만 발생합니다.

왜이 오류가 발생하는지 궁금합니다. 나는 Boost.Serialization이 우리가이 두 가지 다른 행동을 갖도록하는 것을 알고 싶습니다. 내가 부스트 라이브러리를 사용 1.47.0

답변

2

saveconst 기능입니다 만 다른 const 함수를 호출 할 수 있습니다. GetVal은 그렇지 않습니다. 변경 :

std::string GetVal() const { ... } 
관련 문제