我正在自学C ++并学习课堂转课。我了解在尝试进行类转换时,必须使用operator
关键字。在这种特殊情况下,我有两个类:Ltime
和Time
。我正在尝试使用operator
创建一个方法,以便能够将每个类相互转换。
我的问题是,因为我试图使用operator
关键字从类转换,所以第一个类声明将引用尚未定义的类。如果我要切换第一类和第二类,同样的问题会持续存在,因为它们都相互依赖。
我的教科书说要解决这个问题,你可以使用第二课的前向声明。我做到了这一点,但这并没有解决我的问题。然后,我尝试将每个类拆分为单独的文件,并在每个文件和主文件中使用include语句,但这不起作用。如果这是解决方案,有人可以解释一下这个解决方案的结构吗?
有人可以解释一下如何让这段代码生效吗?为清楚起见,下面是问题和我的代码。提前谢谢。
编写一个具有Time类和Ltime类的C ++程序。 Time类应该有名为hours,minutes和seconds的整数数据成员,Ltime类应该有一个名为elsecs的长整数数据成员,它表示自午夜以来经过的秒数。对于Time类,包括一个名为Ltime()的转换运算符函数,该函数将Time对象转换为Ltime对象。对于Ltime类,包括一个名为Time()的转换运算符函数,该函数将Ltime对象转换为Time对象。
我的代码:
#include <iostream>
#include <iomanip>
using namespace std;
/*
* Pg 527) §11.3)
*/
class Ltime;
class Time
{
private:
int hours;
int minutes;
int seconds;
public:
Time(int hr=1, int min=2, int sec=3) : hours(hr), minutes(min), seconds(sec) {}
void show();
operator Ltime();
};
void Time::show()
{
cout << setfill('0')
<< setw(2) << hours << " : "
<< setw(2) << minutes << " : "
<< setw(2) << seconds;
}
Time::operator Ltime()
{
return Ltime(3600*hours + 60*minutes + seconds);
}
class Ltime
{
private:
long secondsFromMidnight;
public:
Ltime(long = 0);
void show();
operator Time();
};
Ltime::Ltime(long sec)
{
secondsFromMidnight = sec;
}
void Ltime::show()
{
cout << secondsFromMidnight;
}
Ltime::operator Time()
{
int hours, minutes, seconds;
hours = int(3600/secondsFromMidnight);
minutes = (secondsFromMidnight / 60)%60;
seconds = secondsFromMidnight%60;
return Time(hours, minutes, seconds);
}
int main()
{
Time a;
a.show();
cout << endl;
Time b(1,0,0);
b.show();
cout << endl;
Ltime c;
c = Ltime(b);
c.show();
cout << endl;
Ltime(b).show();
cout << endl;
return 0;
}
答案 0 :(得分:0)
之前我遇到过这个问题。您在向前声明该类时是正确的,但您尝试使用不完整的类型。解决方案是在Time::operator Ltime()
的定义后移动Ltime
。
// ...snip...
void Ltime::show()
{
cout << secondsFromMidnight;
}
Time::operator Ltime()
{
return Ltime(3600*hours + 60*minutes + seconds);
}