2015-11-10 63 views
0

使用矢量时没有操作员错误我创建了一个for循环输出输入学生的信息,但是当我打印出来使用cout << st.printInfo() << endl;,我no operator "<<" matches these operants

Student类:

class Student { 
private: 
    string nameSurname; 
    int score; 

public: 
    void printInfo(); 
    void setName(string _nameSurname) { nameSurname = _nameSurname; } 
    void setScore(int _score) { score = _score; } 
    Student() { 
     nameSurname = "Not Entered"; 
     score = 0; 
    } 
    ~Student() {} 
}; 

功能打印:

void Student::printInfo() 
{ 
    cout << "-----------------" << endl; 
    cout << "Name and Surname : " << nameSurname << endl; 
    cout << "Score : " << score << endl; 
    cout << "-----------------" << endl; 
} 

主要功能:

vector<Student> v; 
    string nameSurname; 
    int score; 
    Student st; 
for (int i = 0; i < v.size() + 1; i++) 
     { 
      cout << "Enter " << i + 1 << " Student Name and Surname : " << endl; 
      cin.ignore(); 
      getline(cin, nameSurname); 
      st.setName(nameSurname); 
      cout << "Enter Student's Score : " << endl; 
      cin >> score; 
      st.setScore(score); 
      v.push_back(st); 
     } 

错误被显示在内部for循环部分下面。该循环也是主要功能。

for (int i = 0; i < v.size(); i++) 
    { 
     cout << st.printInfo() << endl; 
    } 
+0

它没有找到'运营商<<'和操作符不存在确实如此。奇怪。 – skypjack

+0

@skypjack:提示:在应用到'cout'之前评估'st.printInfo()'。 –

+0

哦,我的错,没有看到他在使用'printInfo'。抱歉。 :-) – skypjack

回答

1

printInfo函数返回voidstd::ostream有专门用于打印void的设施。

将您的printInfo更改为返回值。
或单独拨打printInfo功能。
或将std::ostream传递给您的printInfo函数。

最好的方法是在Student类中重载operator<<

编辑1:具体细节:
for循环应该是:

for (int i = 0; i < v.size(); i++) 
{ 
    v[i].printInfo(); 
    cout << "\n"; 
} 
+0

刚刚更改for循环的内容并开始工作。感谢您的帮助。但我没有使用重载运算符<<。我应该使用它吗?如果是这样,为什么? –

+0

我建议重载'operator <<'和'operator >>'。请记住,如果答案有帮助,请点击复选标记。如果你重载了操作符,你可以这样做:'cout << v [i] << endl;'。 –

+0

谢谢,我会去找运营商。 –