error: invalid use of non-static data member
error: invalid use of non-static data member
class Stack
{
private:
int tos;
const int max = 10;
int a[max];
public:
void push(int adddata);
void pop();
void printlist();
};
错误:无效使用非静态数据成员'max'
代码有什么问题,请帮我更正。
谢谢
正如编译器所说,使数据成员成为静态的
static const int max = 10;
您需要将 max 设为编译时间常量:
static const int max = 10;
如错误所说,max是Stack的非静态成员;因此您只能将其作为 Stack 对象的一部分进行访问。您正在尝试访问它,就好像它是一个静态成员一样,它独立于任何对象而存在。
因此您需要将其设为静态。
static const int max = 10;
如果初始化在头文件中,那么每个包含头文件的文件都会有一个静态成员的定义。因此在 link 阶段你会得到 linker 错误,因为初始化变量的代码将在多个源文件中定义。
对于非堆分配(不使用 new
分配内存),必须在编译时知道数组大小。
如果您使用的是 C++11,constexpr
是一个很好的关键字,它是专门为此目的而设计的。 [编辑:正如@bornfree 在评论中指出的那样,它仍然需要是静态的]
static constexpr int max = 10;
因此,使用 static
使其成为其他人指出的编译时间常量。
您犯的概念错误是您试图在 class 定义中初始化 class 的值。这就是构造函数存在的原因。使用参数化构造函数设置值栈顶及其大小。
当使栈对象传递要创建的栈的大小时:
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;
}
class Stack
{
private:
int tos;
const int max = 10;
int a[max];
public:
void push(int adddata);
void pop();
void printlist();
};
错误:无效使用非静态数据成员'max'
代码有什么问题,请帮我更正。 谢谢
正如编译器所说,使数据成员成为静态的
static const int max = 10;
您需要将 max 设为编译时间常量:
static const int max = 10;
如错误所说,max是Stack的非静态成员;因此您只能将其作为 Stack 对象的一部分进行访问。您正在尝试访问它,就好像它是一个静态成员一样,它独立于任何对象而存在。
因此您需要将其设为静态。
static const int max = 10;
如果初始化在头文件中,那么每个包含头文件的文件都会有一个静态成员的定义。因此在 link 阶段你会得到 linker 错误,因为初始化变量的代码将在多个源文件中定义。
对于非堆分配(不使用 new
分配内存),必须在编译时知道数组大小。
如果您使用的是 C++11,constexpr
是一个很好的关键字,它是专门为此目的而设计的。 [编辑:正如@bornfree 在评论中指出的那样,它仍然需要是静态的]
static constexpr int max = 10;
因此,使用 static
使其成为其他人指出的编译时间常量。
您犯的概念错误是您试图在 class 定义中初始化 class 的值。这就是构造函数存在的原因。使用参数化构造函数设置值栈顶及其大小。 当使栈对象传递要创建的栈的大小时:
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;
}