2015-02-11 125 views
-1

我剛剛在'課程'上課,當我嘗試練習並運行它時...出現錯誤!顯然這是正確的,但它說"no operating "<<" matches these operands"cout with a class of

此外,我試過cin >> stu1.add(x);,但它恰巧也是一個錯誤!我不能這樣做?

下面的代碼:

#include <iostream> 
#include <string> 

using namespace std; 

class stu{ 
    private: 
     string name; 
     int id; 
    public: 
     // constructor 
     stu(){ 
      id=0; 
     } 
     void add(int id){ 
      cin >> name >> id; 
     } 
     void setname(string N){ 
      name=N; 
     } 
     void setid(int I){ 
      id=I; 
     } 
     string getname(){ 
      return name; 
     } 
     int getid(){ 
      return id; 
     } 
     void print(int id){ 
      cout << name << id; 
     } 
}; 


int main(){ 
    stu stu1; 
    int x; 
    string y; 
    cout << "enter name then id:"; 
    cin >> y; 
    stu1.setname(y); 
    cin >> x; 
    stu1.setid(x); 
    cout << stu1.print(x); 

    //cout << "name: " << stu1.getname() << endl; 
    //cout << "id: " << stu1.getid() << endl; 
    return 0; 
} 
+1

你的概念(在你的頭腦發漲)是錯的。請查看istream/ostream運營商(也許操縱者)。適當的設計不會在類「stu」中使用任何cin/cout。 – 2015-02-11 20:01:55

+0

@DieterLücking我的老師說你必須用函數編寫'cout/cin' ..我也懷疑:\ – 2015-02-11 20:10:08

+0

並刪除'add(...)'方法。這是錯誤的,沒有使用;) – tofi9 2015-02-11 20:12:28

回答

0

print不返回任何東西,因此簽名的void一部分。您的功能打印;它不提供任何東西打印。所以......叫它:

stu1.print(x); 
+0

它的作品!我懷疑這是因爲我的老師說你必須寫'cout'!!再次謝謝你! – 2015-02-11 20:03:34

0

由於STU ::打印方法具有無效它的返回類型不能與COUT使用的返回值。

您應該使用

stu1.print(x); 

cout << stu1.getId(); 
3

您需要:

  1. 改變你的print()函數返回要main()std::string值到cout

    #include <sstream> 
    
    string print(int id){ 
        ostringstream oss; 
        oss << name << id; 
        return oss.str(); 
    } 
    

    cout << stu1.print(x); 
    
  2. print()離開返回void和直接寫入cout,然後從主()除去cout

    void print(int id){ 
        cout << name << id; 
    } 
    

    stu1.print(x); 
    

雖這麼說,你的print()方法並不需要有一個輸入參數,因爲你應該顯示類變量id已預先設置:

string print(){ 
    ostringstream oss; 
    oss << name << id; 
    return oss.str(); 
} 

void print(){ 
    cout << name << id; 
} 
+0

這是唯一正確的答案。 – emlai 2015-02-11 20:05:24

+1

謝謝!我現在只是試過:) – 2015-02-11 20:07:28

+0

@ A.m如果這解決了你的問題,請接受答案。謝謝 :) – 2015-02-12 03:02:15

1

你可以使用ostream。首先添加此功能,你的類:

std::ostream& operator<<(std::ostream &os, stu const & s) 
{ 
    s.print(os); 
    return os; 
} 

然後修改打印方法:

void print(std::ostream &os) const 
    { 
    os << id << name; 
    } 

最後,你可以這樣做:

cout << stu1;