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

时间:2015-04-19 18:32:33

标签: 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();
};

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

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

5 个答案:

答案 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;
}