【问题标题】:Initializing array of objects c++初始化对象数组c ++
【发布时间】:2013-12-29 13:51:04
【问题描述】:

我想通过构造函数初始化数组的每个元素

    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;
}

它显示了我初始化方式的错误

【问题讨论】:

  • 这里有什么问题?
  • 使用构造函数初始化列表(并在其中包含其他成员)。
  • 它显示了我初始化方式的错误
  • 一般来说,我们希望您告诉我们错误是什么,并向我们提问。

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


【解决方案1】:

您的语法错误。 C++ 无法识别由括号括起来的以逗号分隔的随机列表事物,因为它不知道您打算将该列表作为Student 构造函数的参数列表。

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

const unsigned int SIZE = 5;

Student students[SIZE];
students[0] = Student("Sarah", 96, 92, 90);
//            ^^^^^^^

不过,请注意,这不是 初始化。这只是事后分配。因此,您的编译器将要求 Student 有一个默认构造函数(不带参数的构造函数),因为它需要它来初始创建 SIZE 元素,位于 Student students[SIZE] 行上。

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

Student students[] = {
   { "Sarah", 96, 92, 90 },
   { "Bob",   80, 72, 54 },
   // ...
};

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

您可能仍希望保留 SIZE 以在其他地方使用,在这种情况下,我建议将其放回数组声明中,以便如果初始化列表长度与此大小不一致,那么您将得到一个令人愉悦的编译器错误。

【讨论】:

  • @user3010026: 像这样^:)
【解决方案2】:
    const int size=5;
Student students[size] = { { "Sarah",96,92,90 }, { /*initializer list for index 1 }, ...{ /*initializer list for index 4 } };

【讨论】:

    【解决方案3】:

    你的构造发生在下面一行

    学生学生[大小]

    【讨论】:

      猜你喜欢
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2018-06-22
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多