2013-08-22 57 views
0

我有一個函數,它將const &返回給一個Object。比方說,如何在C++中從參考中獲取值

class Y { 
    private: 
     Id id; 
    public: 
     Id const& GetId() const; 
} 

現在這個Y對象是另一個類的一部分,比如說X類,它需要通過boost序列化。

class X { 
    template <class Archive> 
    void serialize(Archive& ar, uint32 version) 
    { 
     ar & y->GetId(); 
    } 
    Y y; 
} 

然而,升壓抱怨這並給出錯誤:

error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' 


C:\Users\Y.h(580) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator &<const Id>(T &)' being compiled 
      with 
      [ 

我如何序列化的標識?

+0

也許對[Archive class](http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/archives.html)的使用情況進行審查將是有益的。 – WhozCraig

+0

'Id'有'serialize'函數嗎? –

+0

你也可以發佈整個編譯器錯誤消息嗎? –

回答

2

升壓序列化的目的是用引用序列化到存檔。

問題是它收到的值是引用而不是CONST引用。

Id const& GetId() const; // Returns a const reference 

嘗試使用以下

Id & GetId(); 

然後將下面的

ar & y.GetId(); 
ar << y.GetId(); 

如果你不喜歡封裝的斷裂然後可以使用受保護,朋友,或複製的一個它以另一個值並通過該值作爲參考

Id copy = y.GetId(); 
ar & copy; 
4
ar & y->GetId(); 

應該

ar & y.GetId(); 
+0

同意。我實際上在我的代碼中使用對象Y的引用。所以它是 - > 但是對於給定的片段,它不應該是y。而不是y-> –

0

除了問題 - >(見@thomas),你需要有兩個:

Id const& GetId() const; 
Id& GetId(); 

,或者你BOOST_SERIALIZATION_SPLIT_MEMBER輸入/輸出兩成。