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

关于构造函数的有关问题,小弟我已经弄了一天了,还是没好.

2012-03-15 
关于构造函数的问题,我已经弄了一天了,还是没好...我编写了两个类,第一个是Time类,第二个是Note类,Note类

关于构造函数的问题,我已经弄了一天了,还是没好...
我编写了两个类,第一个是Time类,第二个是Note类,Note类中包含Time类对象,可是程序怎么也通不过,main函数没作用,只是测试用
显示错误:error   C2512:   'Time '   :   no   appropriate   default   constructor   available
以下是代码:
#include   <iostream>
#include   <string>
using   namespace   std;
class   Time
{
public:
Time(   int   tyear,int   tmonth,int   tdate)   {}
int   get_year()   {   return   year;}
int   get_month()   {   return   month;}
int   get_date()   {   return   date;}
void   set_year(int   ayear)   {   year   =   ayear;}
void   set_month(int   amonth)   {   month   =   amonth;}
void   set_date(int   adate)   {   date   =   adate;}  
private:
int   year;
int   month;
int   date;
};                                                               //Time类应该没问题

class   Note
{
public:

Note   (Time   btime,string   bname,   double   ba,double   bb,string   bemoney);
void   set_name(string   aname)   {   name   =   aname;}
                  void   set_time(Time   atime)   {   time   =   atime;}
void   set_money(double   amoney)   {   money   =   amoney;}
void   set_bank(double   abank)   {   bank   =   abank;}
Time   get_time()   {   return   time;}
string   get_name()   {   return   name;}
double   get_money()   {   return   money;}
double   get_bank()   {return   bank;}
//string   get_emoney()   {return   emoney;}
private:
Time   time;
string   name;
double   money;
double   bank;
string   emoney;
};
Note::Note(Time   btime,string   bname,   double   ba,double   bb,string   bemoney)  
{
time   =   btime;
name   =   bname;
money   =   ba;
bank   =   bb;
emoney   =   bemoney;
}
int   main()
{
Time   kk(1,1,1);
Note   aa(kk, "saga ",1,1, "english ");
aa.set_money(10000);
aa.set_name( "saga ");
cout   < <   aa.get_money()   < <   endl;
cout   < <   aa.get_name()   < <   endl;
return   0;
}

可能里面包含许多错误,希望高手给予指点.

[解决办法]


Time( int tyear,int tmonth,int tdate)
Time的构造函数需要三个参数,但在Node中的Time对象并没有初始化,所以编译不通过.解决办法:
1. 为Time写一个不需要参数的构造函数,这一方法不是很好,万不得已不用.
2.在Note的构造函数的初始化列表中为Note中的Time对象time进行初始化.

Note::Note(Time btime,string bname, double ba,double bb,string bemoney): time(time.get_year(), time.get_month(), time.get_day())
{
time = btime;
name = bname;
money = ba;
bank = bb;
emoney = bemoney;
}

其实你的问题就是一个涉及到类中类成员对象的初始化,对于类的成员对象初始化,要放在初始化列表中进行,这些类还没有生成对象, 初始化列表就是构造函数 帽号 后面与 { 前面之间这一区域.
[解决办法]
#include <iostream>


#include <string>
using namespace std;

class Time
{
public:
Time(){};
Time( int tyear,int tmonth,int tdate){}
int get_year() { return year;}
int get_month() { return month;}
int get_date() { return date;}
void set_year(int ayear) { year = ayear;}
void set_month(int amonth) { month = amonth;}
void set_date(int adate) { date = adate;}
private:
int year;
int month;
int date;
}; //Time类应该没问题

class Note
{
public:
Note (Time btime,string bname, double ba,double bb,string bemoney);
void set_name(string aname) { name = aname;}
void set_time(Time atime) { time = atime;}
void set_money(double amoney) { money = amoney;}
void set_bank(double abank) { bank = abank;}
Time get_time() { return time;}
string get_name() { return name;}
double get_money() { return money;}
double get_bank() {return bank;}
//string get_emoney() {return emoney;}
private:
Time time;
string name;
double money;
double bank;
string emoney;
};
Note::Note(Time btime,string bname, double ba,double bb,string bemoney)
{
time = btime;
name = bname;
money = ba;
bank = bb;
emoney = bemoney;
}
int main()
{
Time kk(1,1,1);
Note aa(kk, "saga ",1,1, "english ");
aa.set_money(10000);
aa.set_name( "saga ");
cout < < aa.get_money() < < endl;
cout < < aa.get_name() < < endl;
return 0;
}

这样应该可以了。

热点排行