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'
代码中有什么问题,请帮我正确纠正.谢谢
在编译期间必须知道数组大小以进行非堆分配(不使用new分配内存).
如果您使用的是C++ 11,那么这constexpr是一个很好的关键词,它是专为此目的而设计的.
constexpr int max = 10;
Run Code Online (Sandbox Code Playgroud)
如果您还没有使用C++ 11,请使用static其他人指出的编译时常量.
正如错误所述,max 是 Stack 的非静态成员;因此您只能将其作为 Stack 对象的一部分进行访问。您试图像访问静态成员一样访问它,该静态成员独立于任何对象而存在。
因此你需要使其静态。
static const int max = 10;
Run Code Online (Sandbox Code Playgroud)
如果初始化在头文件中,则包含该头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,您将收到链接器错误,因为初始化变量的代码将在多个源文件中定义。