2013-05-06 3 views
0

임 시작 기능이 0을 반환 할 때 코드가 왜 충돌하는지 알아 내려고 약간의 문제가 있습니다.소멸자가 호출 될 때 부스트 xml_iarchive가 충돌합니다

나는 시작 함수에서 반환 할 때 xml_iarchive에 대한 소멸자를 호출하고 거기에서 실패하고 있다고 생각합니다.

xml_iarchive가 소멸자를 호출하기 전에 flush 또는 일부 함수를 호출해야합니다. 나는 아무 생각이

:)

// serialize 
class FileLayout 
{ 

private: 

    std::string m_name; 
    int m_datetime; 
    std::string m_version; 

    std::string m_clientpath; 
    int m_length; 

public: 

    FileLayout() 
    { 

    }; 

    FileLayout(std::string name ,int datetime, 
       std::string version, std::string clientpath, 
       int length) 
    { 
     m_name = name; 
     m_datetime = datetime; 
     m_version = version; 
     m_clientpath = clientpath; 
     m_length = length; 
    }; 

    // Allow serialization to access non-public data members. 
    friend class boost::serialization::access; 

    template<typename Archive> 
    void serialize(Archive& ar, const unsigned version) 
    { 
     ar & boost::serialization::make_nvp("Name", m_name); 
     ar & boost::serialization::make_nvp("DateTime", m_datetime); 
     ar & boost::serialization::make_nvp("Version", m_version); 
     ar & boost::serialization::make_nvp("ClientPath", m_clientpath); 
     ar & boost::serialization::make_nvp("Length", m_length); 
    } 

    // get 

    std::string name() 
    { 
     return m_name; 
    }; 

    int datetime() 
    { 
     return m_datetime; 
    }; 

    std::string version() 
    { 
     return m_version; 
    }; 

    std::string clientpath() 
    { 
     return m_clientpath; 
    }; 

    int length() 
    { 
     return m_length; 
    }; 

}; 


    int Start(std::string &data) // xml 
    { 
    // set filesize 
    // set name 
    boost::iostreams::basic_array_source<char> device(data.c_str(), data.size()); 
    boost::iostreams::stream<boost::iostreams::basic_array_source<char> > s(device); 
    boost::archive::xml_iarchive ia(s,boost::archive::no_header); 

    ia >> BOOST_SERIALIZATION_NVP(filelayout); 

    data.clear(); 

    return 0; // fails here 
    } 

답변

0

그것을 포장에 문제가 있었다 밝혀, 나는이 문제에 전체 일 동안