C++ 如何从c++;
我有一个func,它将常量&返回给一个对象。比方说C++ 如何从c++;,c++,boost,reference,boost-serialization,C++,Boost,Reference,Boost Serialization,我有一个func,它将常量&返回给一个对象。比方说 class Y { private: Id id; public: Id const& GetId() const; } 现在这个Y对象是另一个类的一部分,比如说类X,它需要通过boost序列化 class X { template <class Archive> void serialize(Archive& ar, uint32 version
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;
}
X类{
模板
作废序列化(存档和ar,uint32版本)
{
ar&y->GetId();
}
Y;
}
但是,boost对此表示不满,并给出了错误:
error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
错误C2027:使用未定义的类型“boost::STATIC\u断言\u失败”
C:\Users\Y.h(580):请参阅正在编译的函数模板实例化'Archive&boost::Archive::detail::interface\u iarchive::operator&(T&)'
具有
[
如何序列化Id
ar & y->GetId();
应该是
ar & y.GetId();
应该是
ar & y.GetId();
boost序列化的目的是使用引用序列化到存档 问题是它将值作为引用而不是常量引用接收
Id const& GetId() const; // Returns a const reference
尝试使用以下命令
Id & GetId();
ar & y.GetId();
ar << y.GetId();
然后是下面的一个
Id & GetId();
ar & y.GetId();
ar << y.GetId();
boost序列化的目的是使用引用序列化到存档 问题是它将值作为引用而不是常量引用接收
Id const& GetId() const; // Returns a const reference
尝试使用以下命令
Id & GetId();
ar & y.GetId();
ar << y.GetId();
然后是下面的一个
Id & GetId();
ar & y.GetId();
ar << y.GetId();
除了问题->(参见@thomas)之外,您还需要两个:
Id const& GetId() const;
Id& GetId();
或者将成员输入/输出一分为二。除了问题->(请参见@thomas),还需要两个:
Id const& GetId() const;
Id& GetId();
或者您确实可以增强序列化功能\U将成员输入/输出一分为二。也许对使用情况进行检查会有所帮助。
Id
是否有序列化功能?您是否可以发布整个编译器错误消息?是的。它是一大块代码的一部分。但我们确实有序列化Id的逻辑。编译器错误是:C:\Users\boost\windows\include\boost/archive/detail/check.hpp(162):错误C2027:将未定义类型“boost::STATIC\u ASSERTION\u FAILURE”与[x=false]C:\Users\boost\windows\include\boost/archive/detail/iseralizer.hpp(577)一起使用:请参阅正在使用[T=const Id]编译的函数模板实例化“void boost::archive::detail::check_const_loading(void)”的参考错误消息应该包含静态断言失败原因的描述;它说了什么?您的真实代码是否错误地尝试将->
应用于对象?我们可以看到Id
的序列化函数吗?也许对用法进行一次检查会有所帮助。Id
是否有序列化
函数那么你能发布整个编译器错误消息吗?是的。它是。它是一大块代码的一部分。但是我们有逻辑来序列化Id。编译器错误是:C:\Users\boost\windows\include\boost/archive/detail/check.hpp(162):错误C2027:使用未定义类型“boost::STATIC\u ASSERTION\u FAILURE”和[x=false]C:\Users\boost\windows\include\boost/archive/detail/iserializer.hpp(577):请参阅使用[T=const Id]编译的函数模板实例化“void boost::archive::detail::check_const_loading(void)”的参考错误消息应该包含静态断言失败原因的描述;它说了什么?您的真实代码是否错误地尝试将->
应用于对象?我们可以看到Id
的序列化函数吗?同意。我实际上在代码中使用了对对象Y的引用。因此它是->但是对于给定的代码段,它应该是Y。在不是y->同意。我实际上在代码中使用了对对象y的引用。所以它是->但是对于给定的代码段它应该是y。而不是y->