读书人

关于类的声明,该怎么处理

发布时间: 2012-03-30 17:32:09 作者: rapoo

关于类的声明
#include <iostream>

using namespace std;
class Time;


class Date
{
public:
Date(int year,int month,int day):y(year),m(month),d(day){}
friend Time;
private:
int y,m,d;
};


class Time
{
public:
Time(int hour,int minute,int second):h(hour),m(minute),s(second){}
void display(Date &date)
{
cout < <date.y < < ', ' < <date.m < < ', ' < <date.d < < ' ' < <h < < ': ' < <m < < ': ' < <s < <endl;
}
private:
int h,m,s;
};

void main()
{
Date date(2007,2,11);
Time time(19,48,30);
time.display(date);

system( "pause ");
}
这样就编译过去了,为什么改成
#include <iostream>

using namespace std;
class Date;

class Time
{
public:
Time(int hour,int minute,int second):h(hour),m(minute),s(second){}
void display(Date &date)
{
cout < <date.y < < ', ' < <date.m < < ', ' < <date.d < < ' ' < <h < < ': ' < <m < < ': ' < <s < <endl;
}
private:


class Date
{
public:
Date(int year,int month,int day):y(year),m(month),d(day){}
friend Time;
private:
int y,m,d;
};

int h,m,s;
};

void main()
{
Date date(2007,2,11);
Time time(19,48,30);
time.display(date);

system( "pause ");
}
就会出现使用了未定义类型“Date”

[解决办法]
如果是第二种声明,应该是:

#include <iostream>

using namespace std;


class Time;

// 下列声明是不合法的:
// class Time::Date;由于Time并未定义


class Time
{
public:

class Date;// 由于下面的嵌套类Date是在public访问权限区,所以声明也应该在public中

Time(int hour,int minute,int second):h(hour),m(minute),s(second){}

void display(Date &date)// 这里使用了事先声明的Date类类型的引用
{
cout < <date.y < < ', ' < <date.m < < ', ' < <date.d < < ' ' < <h < < ': ' < <m < < ': ' < <s < <endl;
}

public:

class Date
{
public:

Date(int year,int month,int day):y(year),m(month),d(day){}

friend Time;

private:
int y,m,d;
};

private:

int h,m,s;
};


void main()
{
Time::Date date(2007,2,11);
Time time(19,48,30);
time.display(date);

system( "pause ");
}

[解决办法]
time 中操作了 date 类成员......
[解决办法]
把display函数的声明和定义分开就行了。在类中声明一下。把定义拿到类外部,在Date类声明后面进行。

读书人网 >C++

热点推荐