运算符的重载,计算两个时间之差。写的比较乱请各位指正

#include
using namespace std;
class Time
{public:
int hour,minute,second;
Time(int hour=0,int minute=0,int second=0);
Time operator-(Time a);
};
Time Time::operator-(Time a)
{Time b;
if(a.hour>hour)
{b.hour=a.hour-hour;
if(a.minute>minute)
b.minute=a.minute-minute;
else {b.minute=(60-a.minute)+minute;
b.hour=b.hour-1;}
if(a.second>second)
b.second=a.second-second;
else {b.second=(60-a.second)+second;
b.minute=b.minute-1;}}
else {b.hour=hour-a.hour;
if(a.minute>minute)
b.minute=a.minute-minute;
else {b.minute=(60-a.minute)+minute;
b.hour=b.hour-1;}
if(a.second>second)
b.second=a.second-second;
else {b.second=(60-a.second)+second;
b.minute=b.minute-1;}}
return b;
}
void main()
{ Time c(3,15,30),a,b;
cin>>a.hour>>a.minute>>a.second;
b=a-c;
}
这个不知道哪里出问题了,运行不了

构造函数你没有写实现代码啊。
Time(int hour=0,int minute=0,int second=0) {this->hour = hour;this->minute = minute;this->second = second;}