【发布时间】:2016-12-17 05:49:27
【问题描述】:
我无法打印出我自己班级的矢量vector<Data> data;。
简单地说,我正在研究一个 class Data_proc 类,它在 public 下有一个构造函数:
explicit Data_proc(const string& n, istream& is)
{
Data temp;
while(is >> temp)
this->data.push_back(temp);
}
我还为打印重载了operator<<:
friend ostream& operator<<(ostream& os, const Data_proc& dp)
{
os << "Person: " << dp.name
<< "\nnumber: " << dp.number;
copy(dp.data.begin(), dp.data.end(), ostream_iterator<Data>(cout));
return os;
}
这里的问题是代码编译没有问题,但是数据向量中没有任何内容被打印到控制台。但是,当我按以下方式更改构造函数时,它可以部分工作:
Data temp;
is >> temp;
data.push_back(temp);
但正如您可能已经猜到的那样,这只会打印出第一个“对”,而从文件中读取的其余数据将被丢弃。我做错什么了?为什么while-loop 不继续从文件中读取?任何帮助表示赞赏!如果您需要有关class Data 的详细信息,请告诉我!
编辑:operator>> 用于数据,我有 string staffName 和 vector<int> passCode:
friend istream& operator>>(istream& is, Data& d)
{
getline(is, d.staffName, '\n');
int temp;
while(is >> temp)
d.passCode.push_back(temp);
return is;
}
如果还需要输入文件的内容,我可以粘贴一个 sn-p!
编辑 2:为class Data 添加了operator<<:
friend ostream& operator<<(ostream& os, const Data& d)
{
os << d.staffName<< "\n";
copy(d.passCode.begin(), d.passCode.end(), ostream_iterator<int>(cout, " "));
return os;
}
编辑 3:创建了一个新的operator>>:
getline(is, d.staffName, '\n');
string results;
getline(is, results, '\n');
istringstream iss(results);
int val;
while(iss >> val)
d.passCode.push_back(val);
return is;
【问题讨论】:
-
operator >>的Data在哪里?请发帖minimal reproducible example。 -
@PaulMcKenzie 我添加了
operator>>。抱歉,代码太长了。 -
@MikelF 你的意思是
operator>>在main()中是如何使用的?
标签: c++ operator-overloading istream