Как решить проблему с потоковыми итераторами c++?

Сейчас разбираюсь с STL. Всегда при вводе и выводе пользуюсь потоковыми итераторами и алгоритмом copy. Нопривыводе структурных объектов студия 12 отмечает ошибку(конструктор либо недоступен либо объявлен как explicit). Даже мой учитель по проге не дал мне ответ на этот вопрос.

Простой пример:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
class Student
{
private:
string name;
int group;
double mark;
public:
Student ()
{ }
Student(Student& a)
{
name=a.name;
group=a.group;
mark=a.mark;
}
Student(string name1,int group1,double mark1)
{
name=name1;
group=group1;
mark=mark1;
}
~Student()
{ }
friend ostream& operator<<(ostream& s,Student& a)
{
s<>(istream& s,Student& a)
{
s>>a.name;
s>>a.group;
s>>a.mark;
return s;
}
Student& operator=(Student& b)
{
name=b.name;
group=b.group;
mark=b.mark;
return *this;
}
};
int main()
{
ifstream myfile;
myfile.open("List.txt");
vector vec;
istream_iterator studit(myfile);
istream_iterator end_of_stream;
copy(studit,end_of_stream,back_inserter(vec));
return 0;
}
  • Вопрос задан
  • 2565 просмотров
Пригласить эксперта
Ответы на вопрос 1
nekipelov
@nekipelov
В этой каше сложно разобраться, но причина очевидна: отсутвие const

Student& operator=(Student& b) - должно быть Student& operator=(const Student& b)
Student(Student& a) - должно быть Student(const Student& a)
ostream& operator<<(ostream& s,Student& a) - должно быть ostream& operator<<(ostream& s,const Student& a)

и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы