У меня возникли проблемы с печатью вектора моего собственного класса, vector<Data> data;
.Оператор C++ << перегрузка не распечатывается вектор
Короче говоря, я работаю на классе class Data_proc
, он имеет конструктор по публике:
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
, дайте мне знать!
Edit: 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;
}
Я могу вставить фрагмент, как содержание входного файла выглядит, как если бы это тоже нужно!
Edit 2: Добавлена operator<<
для class Data
:
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;
}
Edit 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'? Пожалуйста, опубликуйте [mcve]. – PaulMcKenzie
@PaulMcKenzie Я добавил 'operator >>'. Извините за длинный код. – user3941584
@MikelF Вы имеете в виду, как 'operator >>' использовался в 'main()'? – user3941584