用C++初始化类中的数组

Jon*_*FTW 1 c++ arrays int class

我正在为一个包含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];
}
Run Code Online (Sandbox Code Playgroud)

然后我称之为:

int main(){
        HPStack* stack = new HPStack();
        cout << stack->peek() << endl;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行该main函数(用g ++编译)时,它输出:137048当我真的想要它打印时0.这里发生了什么,我该怎么做才能解决这个问题?

CB *_*ley 5

HPStack::HPStack(){
        int stack[4] = {0,0,0,0};
}
Run Code Online (Sandbox Code Playgroud)

这里,stack声明为局部变量.如果您的类有一个也被调用的成员变量,stack那么它不会被初始化并且在构造函数中不可见,因为它已被隐藏.

如果要对成员数组进行零初始化,可以通过在成员初始化列表中为其指定显式空初始值来对其进行初始化.

HPStack::HPStack() : stack()
{
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个非法的成员定义.如果你有一个数组成员,你必须给它一个非零大小:

private:
    int stack[];
Run Code Online (Sandbox Code Playgroud)