请帮助我解决这个奇怪的编译错误。我正在重新定义运算符<<对于 我的班级学生,但在“s.name”出现此错误。变量s.name是一个字符串......
ostream &operator<<(ostream& output, Student &s)
{
output<<"\nIme: "<<s.name<<"\nFakulteten nomer: "<<s.fakn<<"\nSreden uspeh: "<<s.srus<<endl;
return output;
}
以下是变量定义:
class Student{
private:
string name;
string fakn;
Date date;
double srus;
重新定义功能在我的班级中被定义为朋友:
friend ostream &operator<<(ostream &stream, Student &s);
答案 0 :(得分:5)
Student::name
是私有的,因此operator<<
无法访问它。您需要为其创建变量public或创建公共getter,或者使operator<<
类的Student
朋友成为可能,以便它可以访问它的私有成员。
答案 1 :(得分:1)
您需要创建2个功能:
string Student::getAsString()const{
ostringstream oss;
oss << "Student name: " << name << " " << fakn << " " << srus; //etc
return oss.str();
}
ostream & operator<<( ostream & exit, const Student & ob){
return exit << "Exit:" << ob.getAsString() << endl;
}
并且不要忘记添加相应的库:
#include <string>
#include <sstream>
#include <iostream>