2015-11-10 90 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

謝謝,我會去找運營商。 –