使用类的未声明标识符与main函数相比较

时间:2017-09-24 16:22:05

标签: c++

我想了解为什么我在不同的代码区域中收到相同语法的语法错误。

例如:

#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;
 }

2 个答案:

答案 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初始化它,所以这个值在编译时是已知的。