我有一个包含多个字符串(字符串指针)的对象(属于 myObj 类)。我想重载 >> 运算符,以便我可以一次读取多个字符串。
这个重载的运算符函数接受如下语句:
辛>>海峡;
计算< 唯一的问题是,当我填写一系列字符串时,似乎只有第一个字符串在流中得到正确处理。 插入: 提取 代码编译正常,但当我计算对象时,只打印第一个字符串,其他字符串被省略。 所以当我为 cin 提供: 只会显示 Hi。 有人知道为什么会这样吗? 提前致谢! P.S 我是 Stack Exchange 的新手,我正在尽我所能努力解决问题 :)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;
}
Hi
Stack
Exchange
最佳答案
你的循环将像这样工作:
std::getline(is, line);
提取并存储行
中的“Hi”,提取换行符
obj.add(line);
将“Hi”添加到 obj
is >> line;
在行
中提取并存储“Stack”,不提取后面的换行符
std::getline(is, line);
提取空字符串并将其存储在行
中,因为下一个读取的字符是换行符
obj.add(line);
将空字符串 ""添加到 obj
is >> line;
在行
中提取和存储“Exchange”
std::getline(is, line);
什么都不提取(输入流结束)
if (not is)
break;
然后流结束,您的循环退出。
结论:你只存储了 Hi 和一个空字符串
关于c++ - 重载运算符 >> 和 << 以便它接受用户定义的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962333/