0

我正在尝试编写一个函数,该函数作用于结构数组中的结构成员,该结构是另一个结构的成员:)。我需要做的第一件事是找出结构数组的长度,但我不断收到错误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
}
4

3 回答 3

3

编码

struct Student
{
    string name;
    double gpa;
    Class classes[500];
};

表示 aStudent最多可以参加 500 个课程,并且这是一些学校作业,您需要/要求您使用原始数组,而不是其他更合适的std::vector.

首先,幻数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将被归零。

由于它们是无法保证的内置类型(根据您不为不使用的东西付费的原则,所以这是您的决定)。

于 2012-11-01T02:54:11.470 回答
1

在回答“我如何确定数组的长度?”这个问题时,使用(sizeof(array) / sizeof(*array)),如

void gpaCalculate (Student s)
{
    int size = (sizeof s.classes) / sizeof(*s.classes);
    //Lots of awesome code
}

注意:这不适用于可变长度数组参数。在回答“我应该如何在 C++ 中存储项目列表”的问题时,通常应该使用向量。向量往往比数组更容易使用。例如,与数组不同的向量可以改变大小。

于 2012-11-01T03:26:21.783 回答
0

如果将结构更改为 C++ 类会怎样?然后你可以创建一个函数来访问类数组的大小。您可以轻松地将 gpaCalulate 函数调用为 Class 类的函数。

于 2012-11-01T02:52:41.040 回答