我在头文件中有一个命名空间,实现了一个基本堆栈。现在,在push函数上,它应该将一个char推到堆栈上,然后使用pop函数,它会从堆栈中删除一个字符AND这是我的问题,将弹出的元素打印到控制台,但是它实际上从来没有这样做过。我的问题是,为什么会发生这种情况,我可能错过了什么样的东西?
int main()
{
myStack::push(12);
myStack::push(344);
myStack::pop();
return 0;
}
以及头文件:
void push(int c)
{
if(top == max_size) throw Overflow();
v[top] = c;
top++;
}
void pop()
{
printf("%dn",v[top]);
top--;
}
myStack定义:
namespace myStack {
const int max_size = 200;
int top = 0;
int v[max_size];
class Overflow {
public:
bool isOverflow = true;
};
void push(int c)
{
if(top == max_size) throw Overflow();
v[top] = c;
top++;
}
void pop()
{
printf("%dn",v[top]);
top--;
}
}
请注意,对push
的调用在递增top
之前会分配给v[top]
,因此在pop
函数中,top
的值是一个未分配的整数。
您只需要在打印v[top]
的值之前递减top
。
void pop()
{
top--;
printf("%dn",v[top]);
}