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 许可协议
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 许可协议
正如错误所说, max 是 Stack 的非静态成员;因此您只能将其作为 Stack 对象的一部分进行访问。您试图访问它,就好像它是一个独立于任何对象存在的静态成员一样。
因此,您需要将其设为静态。
static const int max = 10;
如果初始化在头文件中,则包含头文件的每个文件都将具有静态成员的定义。因此,在链接阶段,您将收到链接器错误,因为初始化变量的代码将在多个源文件中定义。
原文由 Vinay Shukla 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
对于非堆分配(不使用
new
分配内存),必须在编译期间知道数组大小。如果您使用的是 C++11,
constexpr
是一个很好的关键字,它是专门为此目的而设计的。 [编辑:正如@bornfree 在评论中指出的那样,它仍然需要是静态的]因此,正如其他人指出的那样,使用
static
使其成为编译时间常数。