c++ - 在 C++ 类中初始化数组

标签 c++ arrays class int

我正在为具有 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/

相关文章:

c++ - 插入排序 C++ vector

php - 使用计数返回数组中的差异

php - 如何在 PHP (Java)Doc 中标记数组值类型?

java - 创建新的 ClassLoader 以重新加载 Class

c++ - 将 unsigned int 的三元组映射到 double——这是最优化/最有效的方法吗?

c++ - 为什么静态成员变量不能很好地与三元运算符一起使用?

c++ - 用于在 linux 中获取 CPU 负载的 C API

c++ - 数组和指针作为函数参数出现,只是作为声明

java - 如何进行双数组枚举查找

python - 尝试在 Python 3 中将函数作为整数返回