2010-04-06 70 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