C++在另一个类中定义某一个类个对象数组

class Lesson
{
public:

string subject,ID;
int credit;
char grade;
Lesson(string sub,string id,int cre,char gra):subject(sub),ID(id),credit(cre),grade(gra){}
void display2()
{
cout<<ID<<" "<<subject<<" "<<credit<<" "<<grade<<" "<<endl;
}

};

class Student
{
public:
Lesson le[6] //在这里定义的对象数组
string name;
int ID,number;
char yn;

Student(string nam,int id,int num,char YN):name(nam),ID(id),number(num),yn(YN){} //**
...................
(这个类后面还有函数什么的)

然后我在main函数中先将Student的构造函数初始化,再将数组初始化,如下

Student stud1("Lisa Miller",890238,4,'Y'),stud2("Bill Wilton",798324,5,'N'),stud3("Dandy Goat",746333,6,'Y');
stud1.le[4]={
Lesson("ComputerSci","CSC478",3,'B'),
Lesson("History","HIS356",3,'A'),
Lesson("Mathematics","MTH345",4,'A'),
Lesson("Physics","PHY357",3,'B')
};

但是编译器说是//**这一条语句出错 原因是没有默认构造函数
还有对数组初始化的{}括号也说是错误
求解

int a[3] = {1, 2, 3}; // ok

int b[3];
b[3] = {1, 2, 3};  // error of course


C++ 中, 不能用第二种方式 对数组 初始化, 除非 像a一样, 在定义的时候 可以. 


=====

多说一些:

如果 Lesson 没有默认的构造函数, 那么在Stu 类中 又没有显式的调用 Lesson 的 非默认构造函数的话, 会编译错误. 

这点在 <Effictive C++> 上讲了. 因为, Lesson数组定义的时候, 是要为它的每一个元素 调用构造函数的. 而同时, <C++ Primer> 也讲了, 对于类中的成员, 如果不显式的对其初始化, 那它便会调用该成员的默认构造函数初始化.


所以对于 你的问题, 

    对 Lesson 添加 默认构造函数.

    像这样 :

     Student(string nam,int id,int num,char YN)
            :name(nam),ID(id),number(num),yn(YN),
            le{{"ss", "22", 3, 'c'}, {"hh", "11", 4, 'l'}, .....}               // 对类中成员 为 数组的 初始化, 必须 在这里(构造函数的初始化列表中, 而不能在它的函数体中)
       {  // 不能在这.

       }

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网