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

新手上路,请多包涵
class Stack
{
private:

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

    void push(int adddata);
    void pop();
    void printlist();
};

错误:非静态数据成员“max”的使用无效

代码有什么问题,请帮助我进行适当的更正。谢谢

原文由 user3584564 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 703
2 个回答

对于非堆分配(不使用 new 分配内存),必须在编译期间知道数组大小。

如果您使用的是 C++11, constexpr 是一个很好的关键字,它是专门为此目的而设计的。 [编辑:正如@bornfree 在评论中指出的那样,它仍然需要是静态的]

 static constexpr int max = 10;

因此,正如其他人指出的那样,使用 static 使其成为编译时间常数。

原文由 Titus 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

因此,您需要将其设为静态。

 static const int max = 10;

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

原文由 Vinay Shukla 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题