这是我以(HH,MM,SS)
格式添加2个Duration对象的方法。
inline ostream& operator<<(ostream& ostr, const Duration& d){
return ostr << d.getHours() << ':' << d.getMinutes() << ':' << d.getSeconds();
}
Duration operator+ (const Duration& x, const Duration& y){
if ( (x.getMinutes() + y.getMinutes() >= 60) && (x.getSeconds() + y.getSeconds() >= 60) ){
Duration z( (x.getHours() + y.getHours() + 1), (x.getMinutes() + y.getMinutes() + 1 - 60), (x.getSeconds() + y.getSeconds() - 60) );
return z;
}
else if (x.getSeconds() + y.getSeconds() >= 60){
Duration z( (x.getHours() + y.getHours()), (x.getMinutes() + y.getMinutes() + 1), (x.getSeconds() + y.getSeconds() - 60) );
return z;
}
else if (x.getMinutes() + y.getMinutes() >= 60){
Duration z( (x.getHours() + y.getHours() + 1), (x.getMinutes() + y.getMinutes() - 60), (x.getSeconds() + y.getSeconds()) );
return z;
}
else{
Duration z( (x.getHours() + y.getHours()), (x.getMinutes() + y.getMinutes()), (x.getSeconds() + y.getSeconds()) );
return z;
}
}
在我的主要方法中,我有:
Duration dTest4 (01,25,15);
Duration result = dTest4+dTest4;
cout << result << endl;
不幸的是,当我运行该程序时,我收到此错误:
error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Duration const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVDuration@@@Z) referenced in function _wmain 1>C:\Users\...exe : fatal error LNK1120: 1 unresolved externals
我希望能够在单个实体中一起添加两次。 IE浏览器。小时在一起,然后是分钟,然后是秒。因此,当{2}分钟超过一小时的60分钟时,if-else
处理......
任何帮助将不胜感激。
答案 0 :(得分:2)
问题在于:cout << result << endl;
您尚未定义std::ostream& operator<<
的重载版本,用于将Duration
对象写入ostream。这样的事情应该这样做:
std::ostream& operator<<(std::ostream& os, const Duration& rhs)
{
os << "Hours: <" << hours_ << ">, ";
os << "Minutes: <" << minutes_ << ">, ";
os << "Seconds: <" << seconds_ << ">";
return os;
}
答案 1 :(得分:1)
我猜测流插入器是在Duration
类的源文件中定义的,而不是在标头中;这将解释未定义的引用,因为它是内联的。如果是这种情况,请将内联定义移动到标题中。
添加中也存在问题:如果 分钟和秒都会溢出会发生什么?第一个if
语句将捕获分钟溢出并返回Duration
对象,其秒超出范围。创建新对象可能更简单,不考虑溢出,然后检查溢出的秒数,并在必要时处理它,然后检查溢出的分钟数,并在必要时处理它。现在你知道为什么大多数日期/时间库使用整数类型来存储超过纪元的秒数(或者其他),而不是像这样分解细节。
答案 2 :(得分:0)
您需要为&lt;&lt;创建方法运营商。目前,cout无法解析你的持续时间。
答案 3 :(得分:-1)
问题出在这条线上
cout << result << endl;
您正在尝试使用&lt;&lt;当您仅重载+运算符时,对象上的运算符
尝试:
cout << result.getHours() << endl;