首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++学习组合类时编的程序通不过编译,到底是那里有错?解决方法

2012-02-13 
C++学习组合类时编的程序通不过编译,到底是那里有错?一下为编译过程中出现的错误:C:\Documents and Settin

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 中函数名和变量名用小写,如果是两个单词联合起来的第一个单词小写,第二个单词的第一个字母大写,不然看名字分不清楚

热点排行