C++学习组合类时编的程序通不过编译,到底是那里有错?
一下为编译过程中出现的错误:
C:\Documents and Settings\cc\My Documents\1020_1.cpp In constructor `People::People(Date)':
64 C:\Documents and Settings\cc\My Documents\1020_1.cpp no match for call to `(Date) (Date&)'
C:\Documents and Settings\cc\My Documents\200610113055_焦圆_1020_1.cpp In member function `void People::Input()':
91 C:\Documents and Settings\cc\My Documents\200610113055_焦圆_1020_1.cpp no match for call to `(Date) (Date&)'
以下为源程序:
//第4章 习题
//4-10
/*设计用于人事管理的“人员”类 。只抽象出编号number、性别sex、出生日期birthday、身份证号id。
其中“出生日期 ”声明为一个日期类的内嵌子对象。
用成员函数实现对人员信息的录入和显示
要求包括:
构造函数和析构函数、拷贝构造函数、内联成员函数、带默认形参值的成员函数、类的组合 */
#include <iostream>
using namespace std;
class Date //Date类的定义
{
public:
Date()
{
Year = 2007;
Month = 01;
Day = 01;
}
Date(Date &d);
int GetYear() {return Year;}
int GetMonth() {return Month;}
int GetDay() {return Day;}
void InDate();
private:
int Year,Month,Day;
};
void Date:: InDate()
{
int InYear,InMonth,InDay;
cout << "请输入人员的出生日期,依次输入年、月、日:" << endl;
cin >> InYear >> InMonth >> InDay;
Year = InYear;
Month = InMonth;
Day = InDay;
}
Date::Date(Date &d)//拷贝构造函数的实现
{
Year = d.Year;
Month = d.Month;
Day = d.Day;
cout << "Date 拷贝构造函数被调用" << endl;
}
//类的组合
class People//People类的定义
{
public:
People(Date bbirthday)
{
Number = 0;
Sex = 'M';
Id = 0;
Birthday(bbirthday);
}
People(People &P);
void Input();
void Show();
private:
char Sex;
int Number,Id;
Date Birthday;
};
void People::Input()
{
int NNumber;
char NSex;
Date NBirthday;
long int NId;
cout << "请输入人员的编号:" << endl;
cin >> NNumber;
cout << "请输入人员的性别(请用M/F表示男/女):" << endl;
cin >> NSex;
NBirthday.InDate();
cout << "请输入人员的身份证号:" << endl;
cin >> NId;
Number = NNumber;
Sex = NSex;
Birthday (NBirthday);
Id = NId;
}
void People::Show()
{
cout << "Sex:" << Sex << endl;
cout << "Number:" << Number << endl;
cout << "Birthday:" << Birthday.GetYear() << "年" << Birthday.GetMonth() << "月" << Birthday.GetDay() << "日" << endl;
cout << "Id:" << Id << endl;
}
/*//组合类的构造函数
People:: People (int nnumber = 0,char ssex = 'F',Date bbirthday,long int iid = 0)
:Birthday (bbirthday)
{
cout << "People构造函数被调用" << endl ;
Number = nnumber;
Sex = ssex;
Id = iid;
}*/
//组合类的拷贝构造函数
People:: People(People &P):Birthday(P.Birthday)
{
cout << "People拷贝构造函数被调用" << endl;
Number = P.Number;
Sex = P.Sex;
Id = P.Id;
}
int main()
{
Date bir1;
People p1(bir1);
p1.Input();
p1.Show();
}
[解决办法]
- C/C++ code
#include "stdafx.h"
#include <iostream >
using namespace std;
/*设计用于人事管理的“人员”类 。只抽象出编号number、性别sex、出生日期birthday、身份证号id。
其中“出生日期 ”声明为一个日期类的内嵌子对象。
用成员函数实现对人员信息的录入和显示
要求包括:
构造函数和析构函数、拷贝构造函数、内联成员函数、带默认形参值的成员函数、类的组合 */
//类的组合
class People
{
private:
class Date //Date类的定义
{
public:
Date()
{
Year = 2007;
Month = 01;
Day = 01;
}
Date(const Date &d)
{
Year = d.Year;
Month = d.Month;
Day = d.Day;
cout < < "Date 拷贝构造函数被调用" < < endl;
}
Date& operator = (const Date& d)
{
this->Year = d.Year;
this->Month = d.Month;
this->Day = d.Day;
return *this;
}
int GetYear()
{
return Year;
}
int GetMonth()
{
return Month;
}
int GetDay()
{
return Day;
}
void InDate()
{
int InYear,InMonth,InDay;
cout < < "请输入人员的出生日期,依次输入年、月、日:" < < endl;
cin >> InYear >> InMonth >> InDay;
Year = InYear;
Month = InMonth;
Day = InDay;
}
private:
int Year,Month,Day;
};
public:
People(void)
{
Number = 0;
Sex = 'M ';
Id = 0;
}
People(const People &P)
{
cout < <"People拷贝构造函数被调用" < <endl;
Number = P.Number;
Sex = P.Sex;
Id = P.Id;
this->Birthday = P.Birthday;
}
void Input();
void Show();
private:
char Sex;
int Number,Id;
Date Birthday;
};
void People::Input()
{
int NNumber;
char NSex;
Date NBirthday;
long int NId;
cout < < "请输入人员的编号:" < < endl;
cin >> NNumber;
cout < < "请输入人员的性别(请用M/F表示男/女):" < < endl;
cin >> NSex;
NBirthday.InDate();
cout < < "请输入人员的身份证号:" < < endl;
cin >> NId;
Number = NNumber;
Sex = NSex;
Birthday = NBirthday;
Id = NId;
}
void People::Show()
{
cout < < "Sex:" < < Sex < < endl;
cout < < "Number:" < < Number < < endl;
cout < < "Birthday:" < < Birthday.GetYear() < < "年" < < Birthday.GetMonth() < < "月" < < Birthday.GetDay() < < "日" < < endl;
cout < < "Id:" < < Id < < endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
People p1;
p1.Input();
p1.Show();
system("pause");
return 0;
}
------解决方案--------------------
#include <iostream >
using namespace std;
class Date //Date类的定义
{
public:
Date()
{
Year = 2007;
Month = 01;
Day = 01;
}
Date(Date &d);
int GetYear() {return Year;}
int GetMonth() {return Month;}
int GetDay() {return Day;}
void InDate();
private:
int Year,Month,Day;
};
void Date:: InDate()
{
int InYear,InMonth,InDay;
cout << "请输入人员的出生日期,依次输入年、月、日:" << endl;
cin >> InYear >> InMonth >> InDay;
Year = InYear;
Month = InMonth;
Day = InDay;
}
Date::Date(Date &d)//拷贝构造函数的实现
{
Year = d.Year;
Month = d.Month;
Day = d.Day;
cout << "Date 拷贝构造函数被调用" << endl;
}
//类的组合
class People//People类的定义
{
public:
People(Date bbirthday)
{
Number = 0;
Sex ='M';
Id = 0;
//Birthday(bbirthday);
Birthday=bbirthday;
}
People(People &P);
void Input();
void Show();
private:
char Sex;
int Number,Id;
Date Birthday;
};
void People::Input()
{
int NNumber;
char NSex;
Date NBirthday;
long int NId;
cout << "请输入人员的编号:" << endl;
cin >> NNumber;
cout << "请输入人员的性别(请用M/F表示男/女):" << endl;
cin >> NSex;
NBirthday.InDate();
cout << "请输入人员的身份证号:" << endl;
cin >> NId;
Number = NNumber;
Sex = NSex;
Birthday=NBirthday;
// Birthday (NBirthday); 这是什么啊,这样也能调用构造函数 上同
Id = NId;
}
void People::Show()
{
cout << "Sex:" << Sex << endl;
cout << "Number:" << Number << endl;
cout << "Birthday:" << Birthday.GetYear() << "年" << Birthday.GetMonth() << "月" << Birthday.GetDay() << "日" << endl;
cout << "Id:" << Id << endl;
}
/*//组合类的构造函数
People:: People (int nnumber = 0,char ssex = 'F ',Date bbirthday,long int iid = 0)
:Birthday (bbirthday)
{
cout < < "People构造函数被调用" < < endl ;
Number = nnumber;
Sex = ssex;
Id = iid;
}*/
//组合类的拷贝构造函数
People:: People(People &P):Birthday(P.Birthday)
{
cout << "People拷贝构造函数被调用" << endl;
Number = P.Number;
Sex = P.Sex;
Id = P.Id;
}
int main()
{
Date bir1;
People p1(bir1);
p1.Input();
p1.Show();
return 0;
}
按java 中函数名和变量名用小写,如果是两个单词联合起来的第一个单词小写,第二个单词的第一个字母大写,不然看名字分不清楚