
C++使用了未定义类型
#include<iostream>usingnamespacestd;classdate;//声明date类classtime//定义time类{public:time...
#include<iostream>
using namespace std;
class date;//声明date类
class time//定义time类
{
public:
time(int h,int m,int s):hour(h),minute(m),sec(s){}
void display(date &d)//输入函数,输出时间和日期
{
cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
private:
int hour;
int minute;
int sec;
};
class date//定义date类
{
public:
date(int m,int d,int y):month(m),day(d),year(y){}
friend time;//将time设为date的友元类
private:
int month;
int day;
int year;
};
int main()//主函数
{
time t(14,37,29);
date d(10,26,2009);
t.display(d);
return 0;
}
我明明提前声明了date类的,可是调试的时候出现下面句子:
1>.\11题.cpp(10) : error C2027: 使用了未定义类型“date”
1> .\11题.cpp(3) : 参见“date”的声明
1>.\11题.cpp(10) : error C2228: “.month”的左边必须有类/结构/联合
麻烦大家看看啊,多谢啦啊 展开
using namespace std;
class date;//声明date类
class time//定义time类
{
public:
time(int h,int m,int s):hour(h),minute(m),sec(s){}
void display(date &d)//输入函数,输出时间和日期
{
cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
private:
int hour;
int minute;
int sec;
};
class date//定义date类
{
public:
date(int m,int d,int y):month(m),day(d),year(y){}
friend time;//将time设为date的友元类
private:
int month;
int day;
int year;
};
int main()//主函数
{
time t(14,37,29);
date d(10,26,2009);
t.display(d);
return 0;
}
我明明提前声明了date类的,可是调试的时候出现下面句子:
1>.\11题.cpp(10) : error C2027: 使用了未定义类型“date”
1> .\11题.cpp(3) : 参见“date”的声明
1>.\11题.cpp(10) : error C2228: “.month”的左边必须有类/结构/联合
麻烦大家看看啊,多谢啦啊 展开
5个回答
展开全部
这样提前声明是没用的。 编译time的时候date类的结构还不知道, 这时候你就算提前声明也只能用date类的指针, 而不能有date型变量。 否则编译器没法处理这个变量成员的位移之类的东西所以也就没法编译
所以如果你要在time里用到date, 你就得把date写到前头去。 或者你在time里参数就写 date* 。当然这样也不可以把实现写在date前头了, 否则d.month之类的表达式还是处理不了
所以如果你要在time里用到date, 你就得把date写到前头去。 或者你在time里参数就写 date* 。当然这样也不可以把实现写在date前头了, 否则d.month之类的表达式还是处理不了
展开全部
你把成员函数void display(date &d)的定义放在date类之后就行。
前向声明只是为了在定义之前声明之后的作用域中使用它来声明它的对象或指针,但不能访问它的对象的成员。
前向声明只是为了在定义之前声明之后的作用域中使用它来声明它的对象或指针,但不能访问它的对象的成员。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
提前声明不是这么用的。
对于这个问题建议将date类的定义放在time类前。
另外还有个问题。你的友元定义也是有问题的。
将time类声明为友元的正确做法应该是:friend class time;
对于这个问题建议将date类的定义放在time类前。
另外还有个问题。你的友元定义也是有问题的。
将time类声明为友元的正确做法应该是:friend class time;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以把a,b类分为两个文件来定义,然后分别用include包含需要的类头文件。不过,不建议你使用交叉定义的方式来定义类,可以使用一个通用类或者定义一个父类来解决这个问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
friend time;//将time设为date的友元类
改成
friend class time;
改成
friend class time;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询