为什么在公共数据成员之前使用“静态”关键字?

时间:2019-06-05 14:59:49

标签: c++

我在班级的公共部分拥有一个称为“学生”的整数数据成员,并在构造函数中用作参数。 gradebook.h:

class gradebook
{
public:
    int students = 10;
    gradebook(string, int[]);
    void SetCourseName(string _coursename);
    ...
private:
    string coursename;
    ...
};

gradebook.cpp:

#include "gradebook.h"

gradebook::gradebook(string s1, int array[students])
{
    SetCourseName(s1);
}
void gradebook::SetCourseName(string _coursename)
{
    coursename = _coursename;
}

当我尝试编译代码时收到此错误:

invalid use of non-static data member 'gradebook::students'
gradebook::gradebook(string s1, int array[students])
                                          ^

如果我将'static const'放在'int student = 10'之前,问题就解决了。

为什么?

1 个答案:

答案 0 :(得分:0)

此表达式定义固定长度的堆栈分配数组。必须在编译时知道数组的长度:

int array[students]

添加static关键字可将数组的长度作为编译时常量内联。

要像您的示例中那样进行类内初始化,您实际上需要按如下所示定义变量const和static:

static const int students = 10;

您可以在http://www.cplusplus.com/doc/tutorial/arrays/

上找到有关阵列的一些详细信息

加法:将固定长度的数组作为参数传递会导致传递指针,长度将被忽略。因此,您可以简单地忽略传递的数组的“长度”,并将类内变量用作用于迭代数组的常量。