class Stack
{
private:
int tos;
const int max = 10;
int a[max];
public:
void push(int adddata);
void pop();
void printlist();
};
错误:无效使用非静态数据成员'max'
代码中有什么问题,请帮我正确纠正。 谢谢你
答案 0 :(得分:6)
在编译期间必须知道数组大小以进行非堆分配(不使用new
来分配内存)。
如果您使用的是C ++ 11,constexpr
是一个很好的关键词,它是专为此目的而设计的。
constexpr int max = 10;
如果您还没有使用C ++ 11,请使用static
使其成为编译时常量,正如其他人指出的那样。
答案 1 :(得分:2)
如错误所示,max是Stack的非静态成员;因此您只能将其作为Stack对象的一部分进行访问。您正试图访问它,就像它是一个静态成员一样,它独立于任何对象而存在。
因此你需要让它静止。
static const int max = 10;
如果初始化在头文件中,那么包含头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,您将获得链接器错误,因为初始化变量的代码将在多个源文件中定义。
答案 2 :(得分:1)
正如编译器所说,使数据成员静态
static const int max = 10;
答案 3 :(得分:1)
您需要使编译时间最大化为常量:
static const int max = 10;
答案 4 :(得分:0)
您正在犯的概念错误是您正在尝试在类定义中初始化类的值。这就是构造函数存在的原因。使用参数化构造函数设置堆栈顶部的值及其大小。 当使堆栈对象传递要创建的堆栈的大小时:
class Stack {
private:
int tos;
int a[max];
public:
Stack(int s);
void push(int adddata);
void pop();
void printlist();
};
Stack::Stack(int s) {
tos=-1;
max=s;
}