У меня есть базовый класс Student (должен быть классом) (да, нет инкапсуляции, а также пропущено PLUS), и я хотел бы создать пользовательские операторы извлечения и вставки. После бесчисленных поисков он все равно не сработает. То, что я этоРеализация оператора извлечения и вставки C++
#ifndef student
#define student
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
string name;
double score;
Student();
Student(string name, double score) : name(name), score(score) {}
friend ostream& operator<<(ostream &out, Student &student);
friend istream& operator>>(istream &in, Student &student);
};
#endif
#include "student.h"
ostream& operator<<(ostream &out, Student &student)
{
out << student.name << ", " << student.score;
return out;
}
istream& operator>>(istream &in, Student &student)
{
if (!in >> name || !in >> score)
{
in.setstate(ios::failbit);
}
return in;
}
Я пробовал много вещей из this-> имя Student :: имя назвать студенческим :: student.name к изменению функции подписи, которая на самом деле в конечном итоге работает, за исключением того, что фактически не перегружает оператора. pls halp: D
Редактировать: Что касается конкретной проблемы, он выполняет член класса Student внутри метода. student.name и student.score бросают в
expected primary-expression before '.' token
и нижний просто пережиток бросали другое решение на него, но это ошибка области видимости.
Edit2: Проблема оказаться конфликт с охранником в заголовке называют студентом, таким образом, препроцессор бы атомной бомбой студента слова везде -_- Спасибо за помощь
Добро пожаловать в StackOverflow! Какое фактическое сообщение об ошибке вы получаете? – mindriot
в 'operator >>', вы не можете просто «имя» и «оценка». Кроме того: вы на самом деле не говорите нам, в чем проблема (ошибка компилятора, укажите точный текст. Ошибка времени выполнения? Расскажите, в какой строке возникает ошибка). – crashmstr
Две быстрые заметки: (1) в вашем 'operator <<()', вы должны использовать 'const Student &' (объект не изменяется). (2) В вашей реализации 'operator >>()' вы можете просто написать 'return (in >> name >> score);', не нужно беспокоиться о состоянии самостоятельно, это позаботится. – mindriot