关于类的声明
#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类声明后面进行。