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

classLesson{public:stringsubject,ID;intcredit;chargrade;Lesson(stringsub,stringid,int... 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')
};

但是编译器说是//**这一条语句出错 原因是没有默认构造函数
还有对数组初始化的{}括号也说是错误
求解
展开
 我来答
leesunshine007
推荐于2018-03-23 · TA获得超过1172个赞
知道小有建树答主
回答量:701
采纳率:0%
帮助的人:435万
展开全部
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> 也讲了, 对于类中的成员, 如果不显式的对其初始化, 那它便会调用该成员的默认构造函数初始化.


所以对于 你的问题, 

  1. 对 Lesson 添加 默认构造函数.

  2. 像这样 :

  3.  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'}, .....}               // 对类中成员 为 数组的 初始化, 必须 在这里(构造函数的初始化列表中, 而不能在它的函数体中)
       {  // 不能在这.
  4.    }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式