2013-05-30 49 views
0

我試圖爲學生信息(姓名,IDno和學位)編寫一個班級,該信息將被打印在屏幕上;但我不知道錯誤在哪裏?!C++,具有設置和獲取功能的學生類

#include <iostream> 
#include <conio.h> 
using namespace std; 

class Student { 
private: 
    char name; 
    int idnumber; 
    char degree; 
public: 
    Student(char,int,char); 
    void setName(char n){name = n;} 
    int getName(){return name;} 
    void setIdnumber(char id){idnumber = id;} 
    int getIdnumber(){return idnumber;} 
    void setDegree(char d){degree = d;} 
    int getDegree(){return degree;} 
}; 
Student::Student(char n,int id,char d){ 
    name = n; 
    idnumber = id; 
    degree = d; 
} 

int main(){ 
    Student s1, s2; 
    s1.setName(Sara); 
    s1.setIdnumber(333); 
    s1.setDegree(A); 
    s2.setName(Jack); 
    s2.setIdnumber(222); 
    s2.setDegree(B); 
    cout << "name: " << s1.getName() << ",IDnumber: " << s1.getIdnumber() << ",Degree: " <<  s1.getDegree() << endl; 
    cout << "name: " << s2.getName() << ",IDnumber: " << s2.getIdnumber() << ",Degree: " << s2.getDegree() << endl; 

    getch(); 
    return 0; 
} 
+0

你幾乎沒有告訴我們任何事情。我們對你的錯誤知之甚少。 – chris

+0

請發佈錯誤和編譯器說什麼行請生成它。 – Jhon

+4

因爲代碼中有很多錯誤,所以我會重新閱讀一本關於C++編程的書。 –

回答

1

char是單個字符,不是字符串。嘗試使用std :: string來代替。

也,申報一個字符串,環繞你的字符串中引號 「」 如:

s1.setName("Sara"); 

還,使用的std :: string,你將需要#include <string>

+0

「Sara」是字符串字面值,不能傳遞給接受'char'的成員函數。 – taocp

+0

哦ffs我甚至沒有看到所有這些......就像他們甚至沒有通過編譯器運行它。也許他們只需要正確的代碼,並且他們認爲使用SO作爲它們的錯誤解析器會比安裝編譯器更容易...... – matt

2

顯然,你有以下問題:

Student s1, s2; 

這會嘗試撥打default constructor。但是,您定義了一個帶3個參數的構造函數,這會阻止編譯器爲您生成默認構造函數,因此您將無法創建這些對象,從而導致後續成員函數調用失敗。

s1.setName(Sara); 

setName需要char類型作爲參數類型,如果你的意思是字符串文字"Sara",那麼你就會有麻煩了。類似的問題可以在其他函數調用中找到。你應該解決這個問題。

同時,您應該更喜歡使用member initialization list而不是在構造函數體中使用賦值來初始化您的成員。

Student::Student(char n,int id,char d): name(n), idnumber(id), degree(d){} 

確保您的會員按照name, idnumber, degree的順序申報。

0

有你的代碼一些問題在這裏

char name; 

名字只是字面所以它只能存儲一個文字,而你試圖串薩拉傳遞給它一個字符。因此,改變到數組或指針

char name[10] or char *name 

而且同時通過與名字一樣「薩拉」雙引號把它傳遞。將函數中的所有形式參數改爲char數組或指針。

Student s1, s2; 

這裏同時創建對象S1和S2,它會調用默認的構造函數,你沒有提供的,因此包括默認的構造函數代碼中的

Student(){} 

s1.setDegree(A); 

在這裏,你試圖通過文字不是變量,以便引用它

s1.setDegree('A'); 

C++提供字符串的數據類型,其是多使用方便WRT爲char或燒焦[],所以使用它。您可以像使用其他數據類型(如int,double)一樣操作它。 這將避免你的麻煩指定數組長度,使用strcpy()來複制字符串。

string name;