使用 istream >> 反序列化时出现问题
Trouble when deserializing with istream >>
我正在尝试制作一个名为Serializable的基类,以形式化一些(反)序列化。但是下面的代码出现了非常神秘的错误(在 http://goo.gl/v92vmb 实时运行)。我用 std=c++11 和 clang++ 尝试了 g++-4.9,但没有更多的成功。
谁能告诉我出了什么问题,也许如何改善这种情况?
#include <iostream>
#include <sstream>
/** Classes inheriting this class must implement the serialize-function...*/
class Serializable {
public:
virtual void serialize(std::ostream& os) const = 0;
virtual void deserialize(std::istream& is) const = 0;
};
std::ostream& operator<< (std::ostream& os, const Serializable& s) {
s.serialize(os);
return os;
}
std::istream& operator>> (std::istream& is, const Serializable& s) {
s.deserialize(is);
return is;
}
class Foo : public Serializable {
public:
int N;
void serialize(std::ostream& os) const override;
void deserialize(std::istream& is) const override;
};
void Foo::serialize(std::ostream& os) const {
os << N;
}
void Foo::deserialize(std::istream& is) const {
is >> N;
std::cout << "Got " << N << std::endl;
}
int main()
{
std::stringstream ss;
ss << "9";
Foo f;
f.deserialize(ss);
return 0;
}
错误:
In member function 'virtual void Foo::deserialize(std::istream&)
const':
main.cpp:32:11: error: cannot bind 'std::istream {aka std::basic_istream<ch
ar>}' lvalue to 'std::basic_istream<char>&&'
is >> N;
^
In file included from /usr/include/c++/4.8.3/iostream:40:0,
from main.cpp:1:
/usr/include/c++/4.8.3/istream:872:5: error: initializing argument 1 of '
std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_Ch
arT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char
>; _Tp = const int]'
operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
好的,如@lisyarus所见,反序列化方法被声明为 const。 删除解决了问题。如果错误消息更清晰就好了。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题