我正在尝试编写一个函数,该函数作用于结构的成员,该结构是另一个结构的成员:)。我需要做的第一件事是找出结构数组的长度,但我不断收到错误expression must be class type.
让我获得这个数组长度的合适方法是什么? (PS。该函数必须将Student
结构作为参数。)
结构:
struct Class
{
string title;
int units;
char grade;
};
struct Student
{
string name;
double gpa;
Class classes[500];
};
我的功能看起来像这样:
void gpaCalculate (Student s)
{
int size = s.classes.size() ;
//Lots of awesome code
}
答案 0 :(得分:3)
代码
struct Student
{
string name;
double gpa;
Class classes[500];
};
表示Student
可以参加最多500个课程,这是一些学校作业,您需要/需要使用原始数组,而不是更合适的std::vector
。< / p>
首先,幻数 500应该是常数,如下所示:
int const maxClasses = 500;
然后在每个Student
对象中,您需要存储该学生参加的实际课程数量:
struct Student
{
string name;
double gpa;
int nClasses;
Class classes[maxClasses];
Student()
: name(), gpa( 0.0 ), nClasses( 0 ), classes()
{}
};
构造函数可确保将gpa
和nClasses
归零。
由于它们是内置类型,否则无法保证(根据您不支付不使用内容的原则,因此它是您的决定)。
答案 1 :(得分:1)
在回答“如何确定数组的长度?”这一问题时,请使用(sizeof(array) / sizeof(*array))
,如
void gpaCalculate (Student s)
{
int size = (sizeof s.classes) / sizeof(*s.classes);
//Lots of awesome code
}
注意:这不适用于可变长度数组参数。 在回答“我应该如何在C ++中存储项目列表”这个问题时,通常应该使用向量。向量往往比数组更容易使用。例如,与数组不同的向量可以改变大小。
答案 2 :(得分:0)
如果将结构更改为C ++类怎么办?然后,您可以创建一个函数来访问Classes数组的大小。您可以轻松地将gpaCalulate函数作为Class类的函数调用。