初始化对象数组c ++

时间:2013-12-29 13:51:04

标签: c++ arrays visual-c++ initialization

我想通过构造函数

初始化数组的每个元素
    const int size=5;
Student students[size];
students[0]=("Sarah",96,92,90); <---- the error is here

构造

Student(string sn,double m1,double m2,double fin)
{
    studentName=sn;
    midterm1Grade=m1;
    midterm2Grade=m2;
    finalExamGrade=fin;
}

它向我显示了我正在初始化

的错误

3 个答案:

答案 0 :(得分:3)

你的语法错了。 C ++不识别随机括号,逗号分隔的事物列表,因为它不知道你打算将该列表作为{{1}的参数列表构造函数。

相反,您必须创建一个Student类型的临时未命名对象并分配它:

Student

但请注意,这是初始化。它仅仅是事后分配。因此,您的编译器将要求const unsigned int SIZE = 5; Student students[SIZE]; students[0] = Student("Sarah", 96, 92, 90); // ^^^^^^^ 具有默认构造函数(不带参数的构造函数),因为它将需要它来初始创建Student元素,在行{{1 }}

要初始化,也许你可以这样做:

SIZE

注意我们不再需要名为Student students[SIZE]的常量:当我们像这样初始化时,初始化器知道将要有多少元素,因此可以自动确定数组长度。

您可能仍希望将Student students[] = { { "Sarah", 96, 92, 90 }, { "Bob", 80, 72, 54 }, // ... }; 保留在其他地方使用,但在这种情况下,我建议将其重新放入数组声明中,以便初始化列表长度与此大小不一致时你会得到令人满意的编译器错误。

答案 1 :(得分:3)

    const int size=5;
Student students[size] = { { "Sarah",96,92,90 }, { /*initializer list for index 1 }, ...{ /*initializer list for index 4 } };

答案 2 :(得分:0)

你的施工发生在下面一行

学生[大小]