Я использую затмение закодировать до очереди, одна функция, называемая GetFirst определяется как:C++ шаблона класса ошибок возвращаемого значения
template<class T>
T getFirst(){
return head->data;
}
в основном, после объявления об очереди Q, а также входные некоторые действительные данные, такие как:
Queue<int> Q;
Q.add(2);
cout << Q.getFirst() << endl;
Выходной сигнал 2, что я и хотел;
Но !!! Если изменить код:
Queue<int> Q;
Q.add(2);
cout << Q.getFirst() << endl;
cout << Q.getFirst() << endl;
выход: не
2
2
но что-то вроде:
2
2657382
через несколько мыслей, я изменил код:
Queue<int> Q;
Q.add(2);
cout << Q.getFirst();
cout << Q.getFirst() << endl;
на этот раз это сработало !! Просто хорошо!! выход 22, что имеет смысл.
Может ли кто-нибудь объяснить мне проблему здесь?
Определение узла и очередь является общим и вообще:
template<typename T>
class Node{
public:
Node(T data, Node* left = 0, Node* right = 0): _data(data), _left(left), _right(right){
if(left)
left->_right = this;
if(right)
right->_left = this;
}
Node(): _right(0){}
private:
T _data;
Node<T>* _left;
Node<T>* _right;
friend class Queque<T>;
};
template<typename T>
class Queque{
public:
Queque(): _first(new Node<T>), _size(0){
_first->_right = _first;
_first->_left = _first;
}
void addFirst(T item){
Node<T>(item, _first, _first->_right);
_size++;
}
T examineFirst(){
return _first->_right->_data;
}
private:
Node<T>* const _first;
int _size;
};
Как вы заявляете и назначаете 'head'? –
Нет, если вы не разделяете код для очереди. Сложно отлаживать код других людей, когда вы не видите код. – john