错误:无效使用非静态数据成员

use*_*564 2 c++ arrays compiler-errors

class Stack
{               
private:

    int tos;
    const int max = 10;    
    int a[max];
public:

    void push(int adddata);
    void pop();
    void printlist();
};
Run Code Online (Sandbox Code Playgroud)

错误:无效使用非静态数据成员'max'

代码中有什么问题,请帮我正确纠正.谢谢

Tit*_*tus 6

在编译期间必须知道数组大小以进行非堆分配(不使用new分配内存).

如果您使用的是C++ 11,那么这constexpr是一个很好的关键词,它是专为此目的而设计的.

constexpr int max = 10;
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用C++ 11,请使用static其他人指出的编译时常量.

  • 即使在c ++ 11中,我认为你不能只使用constexpr.您将不得不使用静态constexpr int max = 10. (2认同)

Vin*_*kla 5

正如错误所述,max 是 Stack 的非静态成员;因此您只能将其作为 Stack 对象的一部分进行访问。您试图像访问静态成员一样访问它,该静态成员独立于任何对象而存在。

因此你需要使其静态。

static const int max = 10;
Run Code Online (Sandbox Code Playgroud)

如果初始化在头文件中,则包含该头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,您将收到链接器错误,因为初始化变量的代码将在多个源文件中定义。