Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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++;Boost-序列化错误-传递‘;常数B’;as‘;这’;参数丢弃限定符_C++_Serialization_Boost - Fatal编程技术网

C++ C++;Boost-序列化错误-传递‘;常数B’;as‘;这’;参数丢弃限定符

C++ C++;Boost-序列化错误-传递‘;常数B’;as‘;这’;参数丢弃限定符,c++,serialization,boost,C++,Serialization,Boost,我正在尝试使用Boost序列化一个简单的类。我的类只包含一个std::vector,如下面的代码所示。我的问题是,当我按照进行时,我得到了下面描述的错误。我不知道为什么,因为我没有在任何地方定义const。你知道吗,我做错了什么 我的代码: 解决方案: 您的save()方法需要像这样声明const: void save(Archive & ar, const unsigned int version) const { ... 这将使它编译时不会出错。此外,如果您想要完整的无警告编译,

我正在尝试使用
Boost
序列化一个简单的类。我的类只包含一个
std::vector
,如下面的代码所示。我的问题是,当我按照进行时,我得到了下面描述的错误。我不知道为什么,因为我没有在任何地方定义
const
。你知道吗,我做错了什么


我的代码:
解决方案:

您的
save()
方法需要像这样声明
const

void save(Archive & ar, const unsigned int version) const {
...
这将使它编译时不会出错。此外,如果您想要完整的无警告编译,那么还可以将
save()
中的
for
循环修改为如下所示(将
i
的类型从
int
更改为
size\t
):


因此,它希望得到一个
常量T&
。但是,它将满足于常规的
T&
,因为当需要
const
参数时,接受非
const
。但是,它尝试将其用作常量,但没有任何效果,因为它调用的方法根本没有定义
const
,因此您值得信赖的编译器非常明智,立即阻止了您:)

谢谢!但我想,只有
save
方法应该是
const
,因为
load
const
使得无法初始化正在加载的对象的属性。@Eenoku当然100%同意并更正了。我心不在焉,匆忙地写信。我道歉。无论如何,现在答案是完整的。希望有帮助。
In file included from /usr/include/boost/serialization/extended_type_info_typeid.hpp:37,
                 from /usr/include/boost/archive/detail/oserializer.hpp:39,
                 from /usr/include/boost/archive/detail/interface_oarchive.hpp:23,
                 from /usr/include/boost/archive/detail/common_oarchive.hpp:22,
                 from /usr/include/boost/archive/basic_text_oarchive.hpp:29,
                 from /usr/include/boost/archive/text_oarchive.hpp:31,
                 from /home/martin/CLionProjects/boost_serialization_example/main.cpp:4:
/usr/include/boost/serialization/access.hpp: In instantiation of ‘static void boost::serialization::access::member_save(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive; T = const B]’:
/usr/include/boost/serialization/split_member.hpp:43:32:   required from ‘static void boost::serialization::detail::member_saver<Archive, T>::invoke(Archive&, const T&, unsigned int) [with Archive = boost::archive::text_oarchive; T = B]’
/usr/include/boost/serialization/split_member.hpp:69:18:   required from ‘void boost::serialization::split_member(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive; T = B]’
/home/martin/CLionProjects/boost_serialization_example/main.cpp:35:5:   required from ‘void B::serialize(Archive&, unsigned int) [with Archive = boost::archive::text_oarchive]’
/usr/include/boost/serialization/access.hpp:116:9:   required from ‘static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive; T = B]’
/usr/include/boost/serialization/serialization.hpp:68:22:   required from ‘void boost::serialization::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive; T = B]’
/usr/include/boost/serialization/serialization.hpp:126:14:   [ skipping 4 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/archive/detail/oserializer.hpp:310:22:   required from ‘static void boost::archive::detail::save_non_pointer_type<Archive>::invoke(Archive&, const T&) [with T = B; Archive = boost::archive::text_oarchive]’
/usr/include/boost/archive/detail/oserializer.hpp:534:18:   required from ‘void boost::archive::save(Archive&, T&) [with Archive = boost::archive::text_oarchive; T = const B]’
/usr/include/boost/archive/detail/common_oarchive.hpp:70:22:   required from ‘void boost::archive::detail::common_oarchive<Archive>::save_override(T&) [with T = const B; Archive = boost::archive::text_oarchive]’
/usr/include/boost/archive/basic_text_oarchive.hpp:83:9:   required from ‘void boost::archive::basic_text_oarchive<Archive>::save_override(T&) [with T = const B; Archive = boost::archive::text_oarchive]’
/usr/include/boost/archive/detail/interface_oarchive.hpp:70:9:   required from ‘Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(const T&) [with T = B; Archive = boost::archive::text_oarchive]’
/home/martin/CLionProjects/boost_serialization_example/main.cpp:107:15:   required from here
/usr/include/boost/serialization/access.hpp:91:9: error: passing ‘const B’ as ‘this’ argument discards qualifiers [-fpermissive]
         t.save(ar, file_version);
template<class Archive>
void save(Archive & ar, const unsigned int version){
    ar & this->v->size();
    for(int i = 0; i < this->v->size(); i++) {
        ar & (*this->v)[i];
    }
};

template<class Archive>
void load(Archive & ar, const unsigned int version) {
    size_t size;
    int tmp;
    ar & size;

    this->v = new std::vector<int>(size);
    for(int i = 0; i < size; i++) {
        ar & tmp;
        (*this->v)[i] = tmp;
    }
}
void save(Archive & ar, const unsigned int version) const {
...
for (size_t i = 0; i < this->v->size(); i++)
oa << b;
'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<B>(const T &)'