2010-04-06 2 views
0

Итак, у меня есть базовый связанный класс Queue с основными функциями, такими как front(), empty() и т. Д., И я превратил его в шаблон. Теперь у меня также есть класс под названием Студент. Имеет 2 значения: имя студента и идентификатор студента. Я могу напечатать студент со следующим кодом ..Шаблоны классов 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-> данные типа Student и я предполагаю, что это будет работать, но это не так. Есть что-то, что мне не хватает? Кроме того, когда я пытаюсь:

ptr->data.display(out); 

(Изготовление assumtion ptr-> данные студента типа, он не работает, который говорит мне, что я делаю что-то неправильно

Помощь по этому вопросу будет высоко ценится. !

+1

«я предполагаю ptr-> данные являются Студенческий тип «Ну, это или нет? –

+0

Похоже, что 'ptr-> data' является' Student * '. –

ответ

2

на основе кода вы показываете здесь, следующее не работает:

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

Если вы хотите, чтобы иметь возможность вставить что-то в поток, как это, вам нужно overl oad operator<< для типа ptr->data. Заявление такого перегруженного оператора будет выглядеть

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

Если ptr->data является указателем, то вам необходимо разыменования его перед установкой его в поток:

cout << *ptr->data; 
+0

Да, я прошу прощения, я забыл опубликовать свои перегруженные операторы. Все они перегружены. Проблема в том, что .. когда я выводю ptr-> data .. его почти как не вызывающий перегруженный оператор для Student. –

Смежные вопросы