没有运营商“<<”匹配这些操作数

时间:2014-01-19 15:56:15

标签: c++ redefinition

请帮助我解决这个奇怪的编译错误。我正在重新定义运算符<<对于 我的班级学生,但在“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);    

2 个答案:

答案 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>