我正在为具有 4 个元素的堆栈编写一个类。定义如下:
// HPStack.h
class HPStack{
public:
HPStack();
void push(int x);
int pop();
int peek();
private:
int stack[];
};
// HPStack.cpp
HPStack::HPStack(){
int stack[4] = {0,0,0,0};
}
// push/pop functions
// ....
int HPStack::peek(){
return stack[0];
}
然后我调用它:
int main(){
HPStack* stack = new HPStack();
cout << stack->peek() << endl;
return 0;
}
但是当我运行 main
函数(用 g++ 编译)时,它输出:137048
当我实际上想要它打印 0 时。这里发生了什么以及发生了什么我可以做些什么来解决这个问题?
最佳答案
HPStack::HPStack(){
int stack[4] = {0,0,0,0};
}
这里,stack
被声明为局部变量。如果您的类有一个也称为 stack
的成员变量,那么它不会被初始化并且在构造函数中不可见,因为它已被隐藏。
如果你想对一个成员数组进行零初始化,你可以通过在成员初始化器列表中给它一个显式的空初始化器来值初始化它。
HPStack::HPStack() : stack()
{
}
编辑:这是非法成员定义。如果你有一个数组成员,你必须给它一个非零大小:
private:
int stack[];
关于c++ - 在 C++ 类中初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416107/