【发布时间】:2014-11-17 16:49:55
【问题描述】:
我有一个包含多个字符串(字符串指针)的对象(myObj 类)。我想重载 >> 运算符,以便我可以一次读取多个字符串。
这个重载的运算符函数接受如下语句:
cin >> str;
cout
唯一的问题是,当我填写一系列字符串时,似乎只有第一个字符串在流中得到正确处理。
插入:
istream &operator>>(istream &is, myObj &obj)
{
std::string line;
while (true)
{
std::getline(is, line);
if (not is)
break;
obj.add(line);
is >> line;
}
return is;
}
提取
ostream &operator<<(ostream &os, myObj const &obj)
{
for(size_t idx = 0; idx != obj.size(); ++idx)
os << obj[idx];
return os;
}
代码编译得很好,但是当我 cout 对象时,只打印第一个字符串,而省略其他字符串。
所以当我向 cin 提供:
Hi
Stack
Exchange
只会显示 Hi。
有人知道为什么会这样吗?
提前致谢!
P.S 我是 Stack Exchange 的新手,我正在努力尽可能地解决问题 :)
【问题讨论】:
-
为什么要在循环中使用
std::getline和is >> line?这将提取数据两次,因此每两行丢失一个 -
谢谢!这实际上解决了它!我仔细看了一遍=/
-
那么请接受完整的答案:)
-
为什么不
while (std::getline(is, line)) {}
标签: c++ stream overloading