我想了解为什么我在不同的代码区域中收到相同语法的语法错误。
例如:
#include<iostream>
class Grading
{
public:
Grading();
~Grading();
private:
//Here syntax is broken
//reason: undeclared Identifier
const int studentID = 50;
int students[studentID];
};
int main() {
//Here syntax is fine.
const int studentID = 50;
int students[studentID];
return 0;
}
答案 0 :(得分:1)
const int studentID = 50;
应为static const int studentID = 50;
。现在,您将studentID
声明为非静态类成员,并且仅在构造类实例时构造(并指定值50),而声明数组编译器需要在编译时知道数组大小。基本上你的代码就相当于:
class Grading
{
public:
Grading(): studentID(50) {}
~Grading();
private:
const int studentID;
int students[studentID];
};
如果你在类范围之外写const int studentID = 50;
(例如在main
中),那么它将只是一个常规常量,在编译时已知值50。
答案 1 :(得分:0)
C ++成员数组的大小必须是constexpr
- 在编译时已知,简单const
是不够的,因为它将在运行时初始化,当您创建类的实例时
但是,static const
就足够了,因为你必须用constexpr初始化它,所以这个值在编译时是已知的。