类的构造函数一直报错:no matching function。。。

qq_37751920 2017-05-18 10:58:07
#include <iostream>
#include <string>

using namespace std;

class Date
{
private:
int year,month,day;
static int minyear,maxyear;
public:
Date(int y=0,int m=0,int d=0);
void SetMaxyear(int max);
void SetMinyear(int min);
int getyear();
int getmonth();
int getday();

};
Date::Date(int y,int m,int d)
{
if(y>maxyear)year = maxyear;
else if(y<minyear)year = minyear;
else year = y;
month = m;
day = d;
}
void Date::SetMaxyear(int max)
{
maxyear = max;
}
void Date::SetMinyear(int min)
{
minyear = min;
}
int Date::getyear()
{
return year;
}
int Date::getmonth()
{
return month;
}
int Date::getday()
{
return day;
}
int Date::minyear = 0;
int Date::maxyear = 0;


class Student
{
private:
int number;
string name;
Date birthday;
public:
Student(Date b,int num = 0,string na=" ");
int getnumber();
Date getbirthday();

};
Student::Student(Date b,int num,string na)
{
number = num;
na = name;
birthday = b;
}
int Student::getnumber()
{
return number;
}
Date Student::getbirthday()
{
return birthday;
}
ostream& operator<<(ostream &output,Student temp)
{
output<<temp.getnumber()<<" "<<temp.getbirthday().getyear()<<" "<<temp.getbirthday().getmonth()<<" "<<temp.getbirthday().getday();
return output;
}


class StudentList:public Student
{
private:
Student people[100];
int n;
public:
StudentList(int nm=0);
void AddStudent(Student stu);
void DeleteStudent(int num);
StudentList GetStudent(int year1,int year2);
void Print();
friend ostream& operator<<(ostream output,Student temp);
};
StudentList::StudentList(int nm)
{
n = nm;
}

void StudentList::AddStudent(Student stu)
{
people[n]=stu;
n++;
}
void StudentList::DeleteStudent(int num)
{
int f=0;
for(int i;i<n-1;i++)
{
if(people[i].getnumber()==num&&!f)f=1;
if(f)people[i]=people[i+1];
}
n--;
}
StudentList StudentList::GetStudent(int year1,int year2)
{
StudentList temp;
for(int i;i<n;i++)
{
if(people[i].getbirthday().getyear()<year2&&people[i].getbirthday().getyear()>year1)
temp.AddStudent(people[i]);
}
return temp;
}
void StudentList::Print()
{
if(n>0)
for(int i=0;i<n;i++)
{
cout<<people[i].getbirthday()<<endl;
}
else
cout<<"No result."<<endl;
}
定义了三个类,后面两个类有继承关系。
红色的敌法一直报错
...全文
1343 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37751920 2017-05-18
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
[quote=引用 3 楼 qq_37751920 的回复:] [quote=引用 2 楼 paschen 的回复:] Student增加一个默认构造函数:Student() {} 或者在StudentList构造函数初始化列表显示调用Student(的构造函数
能问一下问什么Student要加上一个默认构造函数,Date的默认构造是不能传递的么?[/quote] 子类对象构造时,基类没有默认构造函数的话需要显示调用基类的构造函数,否则不能完成基类的构造[/quote] 还有一个问题:为什么我删除了继承关系,还是报同样的错误?
qq_37751920 2017-05-18
  • 打赏
  • 举报
回复
引用 6 楼 lzl569029783 的回复:
你有对 Date(int y=0,int m=0,int d=0); 做定义吗,没有的话就会提示错误
有定义。
stonerebel 2017-05-18
  • 打赏
  • 举报
回复
你有对 Date(int y=0,int m=0,int d=0); 做定义吗,没有的话就会提示错误
qq_37751920 2017-05-18
  • 打赏
  • 举报
回复
还有一个问题:为什么我删除了继承关系,还是报同样的错误?
paschen 版主 2017-05-18
  • 打赏
  • 举报
回复
引用 3 楼 qq_37751920 的回复:
[quote=引用 2 楼 paschen 的回复:] Student增加一个默认构造函数:Student() {} 或者在StudentList构造函数初始化列表显示调用Student(的构造函数
能问一下问什么Student要加上一个默认构造函数,Date的默认构造是不能传递的么?[/quote] 子类对象构造时,基类没有默认构造函数的话需要显示调用基类的构造函数,否则不能完成基类的构造
qq_37751920 2017-05-18
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
Student增加一个默认构造函数:Student() {} 或者在StudentList构造函数初始化列表显示调用Student(的构造函数
能问一下问什么Student要加上一个默认构造函数,Date的默认构造是不能传递的么?
paschen 版主 2017-05-18
  • 打赏
  • 举报
回复
Student增加一个默认构造函数:Student() {} 或者在StudentList构造函数初始化列表显示调用Student(的构造函数
qq_37751920 2017-05-18
  • 打赏
  • 举报
回复
D:\C\first\practice.cpp||In constructor 'StudentList::StudentList(int)':| D:\C\first\practice.cpp|98|error: no matching function for call to 'Student::Student()'| D:\C\first\practice.cpp|64|note: candidates are: Student::Student(Date, int, std::string)| D:\C\first\practice.cpp|53|note: Student::Student(const Student&)| D:\C\first\practice.cpp|98|error: no matching function for call to 'Student::Student()'| D:\C\first\practice.cpp|64|note: candidates are: Student::Student(Date, int, std::string)| D:\C\first\practice.cpp|53|note: Student::Student(const Student&)| ||=== Build finished: 2 errors, 0 warnings ===| 错误详细信息
lzw2016 2017-05-18
  • 打赏
  • 举报
回复
在studentlist(int nm=0,Date d,int num = 0,string na=" "):student(d,num,na),d(d),n(nm){}
paschen 版主 2017-05-18
  • 打赏
  • 举报
回复
引用 8 楼 qq_37751920 的回复:
[quote=引用 4 楼 paschen 的回复:] [quote=引用 3 楼 qq_37751920 的回复:] [quote=引用 2 楼 paschen 的回复:] Student增加一个默认构造函数:Student() {} 或者在StudentList构造函数初始化列表显示调用Student(的构造函数
能问一下问什么Student要加上一个默认构造函数,Date的默认构造是不能传递的么?[/quote] 子类对象构造时,基类没有默认构造函数的话需要显示调用基类的构造函数,否则不能完成基类的构造[/quote] 还有一个问题:为什么我删除了继承关系,还是报同样的错误?[/quote] 贴你代码和错误信息
真相重于对错 2017-05-18
  • 打赏
  • 举报
回复
你的代码有问题,把studentlist(int nm=0)默认参数取掉,否则 调用 studentlist sl = new studentlist(); 到底调用studentlist() 还是调用studentlist(int nm=0)???

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧