我想用鏈表實現一個簡單的堆棧。當我運行下面的代碼,我得到使用鏈表的C++堆棧
6
<some random integer>
我一直在找我的錯誤了幾個小時,現在都沒有成功。我猜想某處存在一個未經初始化的變量,但我似乎無法找到它。
#include <iostream>
using namespace std;
class node {
public:
node operator = (const node&);
node(int d,node* n): data(d), prev(n) {}
node(){}
node* prev;
int data;
};
node node::operator = (const node &n) {
node r(n.data, n.prev);
return r;
}
class stack {
public:
stack();
void push(int);
int pop();
bool empty();
private:
node* top;
};
stack::stack() {
top = 0;
}
bool stack::empty() {
return top == 0;
}
void stack::push(int x) {
node n(x,top);
top = &n;
}
int stack::pop() {
if (!empty()) {
node r = *top;
//cout << "r.data: " << r.data << endl;
top = top->prev;
return r.data;
}
else {
cout << "Stack empty!" << endl;
return 0;
}
}
int main() {
stack a;
a.push(5);
a.push(6);
cout << a.pop() << endl;
cout << a.pop() << endl;
}
現在完全讓我困惑的事情是,當我取消對該行
//cout << "r.data: " << r.data << endl;
用於測試目的,則輸出變爲
r.data: 6
6
r.data: 6
6
爲什麼會發生呢?
你應該真的瞭解C++中變量的[範圍](http://en.wikipedia.org/wiki/Scope_(computer_science)) – GWW