如何确定另一个结构中的结构数组的长度

时间:2012-11-01 02:43:20

标签: c++ arrays

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

3 个答案:

答案 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()
    {}
};

构造函数可确保将gpanClasses归零。

由于它们是内置类型,否则无法保证(根据您不支付不使用内容的原则,因此它是您的决定)。

答案 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类的函数调用。