Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从c++;_C++_Boost_Reference_Boost Serialization - Fatal编程技术网

C++ 如何从c++;

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

我有一个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)
     {
         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->