我在班级的公共部分拥有一个称为“学生”的整数数据成员,并在构造函数中用作参数。 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'之前,问题就解决了。
为什么?
答案 0 :(得分:0)
此表达式定义固定长度的堆栈分配数组。必须在编译时知道数组的长度:
int array[students]
添加static
关键字可将数组的长度作为编译时常量内联。
要像您的示例中那样进行类内初始化,您实际上需要按如下所示定义变量const和static:
static const int students = 10;
您可以在http://www.cplusplus.com/doc/tutorial/arrays/
上找到有关阵列的一些详细信息加法:将固定长度的数组作为参数传递会导致传递指针,长度将被忽略。因此,您可以简单地忽略传递的数组的“长度”,并将类内变量用作用于迭代数组的常量。