2010-04-06 62 views
0

好的,所以我有我的基本鏈接隊列類與基本功能,如前(),空()等..我已經把它轉換成模板。現在,我也有一個叫做學生的課。其中有兩個值:學生姓名和學生證。我可以打印出一學生用下面的代碼..C++類模板(類的隊列)

Student me("My Name", 2); 
cout << me << endl; 

這裏是我的學生顯示功能:

void display(ostream &out) const { 
out << "Student Name: " << name << "\tStudent Id: " << id 
    << "\tAddress: " << this << endl; 
} 

現在它工作正常,你可以看到基本的輸出。現在我宣佈,像這樣一個隊列..

Queue<Student> qstu; 

在此隊列中存儲的數據是好的,我可以添加新的價值觀和等..現在我想要做的就是打印出我的整個隊列學生與:

cout << qstu << endl; 

但它只是返回一個地址..這裏是我的隊列顯示功能。

void display(ostream & out) const { 
NodePointer ptr; 
ptr = myFront; 

while(ptr != NULL) { 
    out << ptr->data << " "; 
    ptr = ptr->next; 
} 
out << endl; 
} 

現在,基於此,我假設ptr-> data是一個學生類型,我會認爲這會工作,但事實並非如此。有什麼我失蹤?此外,當我嘗試:

ptr->data.display(out); 

(製造assumtion ptr->數據類型的學生,這是行不通的,它告訴我,我做錯了這個

幫助將非常感激。 !

+1

「我想ptr->數據一個學生類型「是吧,還是不是? – 2010-04-06 02:49:02

+0

聽起來像'ptr-> data'是'Student *'。 – 2010-04-06 02:50:02

回答

2

基於你在這裏展示的代碼,下面不工作:

Student me("My Name", 2); 
cout << me << endl; 

如果您希望能夠插入到的東西像甲流,你需要重載operator<<ptr->data的類型。這樣的重載運算符的聲明看起來像

std::ostream& operator<<(std::ostream& o, const Student& s); 

如果ptr->data是一個指針,那麼你需要取消對它的引用將其插入流之前:

cout << *ptr->data; 
+0

是的,我很抱歉,我忘記發佈我的超載操作員。它們全部超載。問題是..當我輸出ptr->數據..它幾乎就像它沒有調用學生的重載運算符。 – 2010-04-06 02:37:30