c++创建一个对象数组,对象为学生,元素包括学号,姓名,成绩,按成绩从小到大输出,错哪里了!
推荐于2017-12-16
展开全部
你这已经不是错误了,你似乎没有明白类和对象的关系。
先说一下你这个为什么错误:你sort函数中 Student students[3];这里声明,并定义了一个Student类型的数组,注意,这里是声明并且定义了,就是说这里是要分配空间的,就会调用类的默认构造方法构造三个具体的对象。
但是你类中只有Student(int,string,double)这种带参数的构造函数,那么就不会生成默认的无参构造函数,所以就报错了。
你main函数中下列表初始化Student students[3] = {.....},这种就不会报错。
在说明一下,你student[3].sore()。这根本不是对students[3]这三个对象排序。就算你在类中添加了默认无参构造函数让上面你那一行不出错,在这里也会报错的,这里数组超出边界。
student[3].sore();这句话的意思是,对students数组的第四个对象(并不存在),调用它的成员方法sort。然后再sort中又构造了三个Student对象(与main要排序的三个对象没半毛钱关系)进行排序。
先说一下你这个为什么错误:你sort函数中 Student students[3];这里声明,并定义了一个Student类型的数组,注意,这里是声明并且定义了,就是说这里是要分配空间的,就会调用类的默认构造方法构造三个具体的对象。
但是你类中只有Student(int,string,double)这种带参数的构造函数,那么就不会生成默认的无参构造函数,所以就报错了。
你main函数中下列表初始化Student students[3] = {.....},这种就不会报错。
在说明一下,你student[3].sore()。这根本不是对students[3]这三个对象排序。就算你在类中添加了默认无参构造函数让上面你那一行不出错,在这里也会报错的,这里数组超出边界。
student[3].sore();这句话的意思是,对students数组的第四个对象(并不存在),调用它的成员方法sort。然后再sort中又构造了三个Student对象(与main要排序的三个对象没半毛钱关系)进行排序。
追问
那应该怎样做啊!?马上要交作业了!!!
追答
传递指针啊,
你sort函数 static void sort(Student* stus, int num){
这里面把 stus 当成数组也可以额 stus[0].......stus[1].....
注意数组大小是num就可以了。
}
由于c++中没有数组这种类型,通常看作指针,这个函数后 num表示数组的大小。
这里建议做static 静态函数。
你main函数中,
Student students[3] = {xxxxxxxxx};
Student::sort(students,3);这样就可以条用了。你sort也可以做成全局函数。
当然如果你硬要做成成员函数,也不是不可以,这样不便于理解。
student[0].sort(students,3);//这样写着看着别扭。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询