0
我用蝕編寫了一個隊列,稱之爲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'的? – 2013-04-07 17:09:33
除非您共享隊列的代碼,否則不會。當你看不到代碼時,很難調試其他人的代碼。 – john 2013-04-07 17:09:58