在这段代码中,我有一个包含两个变量小时和分钟的对象。我试图连续向一个名为t1的对象添加15分钟和20分钟的值。但是我得到了错误:'。''的左边必须有class / struct / union。
提前致谢。
#include <iostream>
#include <iomanip>
using namespace std;
class Time {
public:
Time(int u, int m);
Time(int g);
void plus(Time t);
void plus(int x);
void print();
private:
int min;
int hour;
};
void Time::plus(Time t) {
min += t.min;
if (min > 59) {
hour++;
min = min - 60;
}
}
void Time::plus(int x) {
min += x;
if (min > 59) {
hour++;
min = min - 60;
}
}
void Time::print() {
cout << setw(2) << hour << " hour and " << min << " minutes";
}
Time::Time(int u, int m) : hour(u), min(m) {
}
Time::Time(int m) : hour(0), min(m) {
}
int main() {
Time t1(1, 10);
const Time kw(15);
t1.plus(kw).plus(20);
cout << "t1 = "; t1.print(); cout << endl;
cin.get();
return 0;
}
答案 0 :(得分:1)
现在,您的plus
会返回void
,或者什么都没有!所以你不能做t1.plus(kw).plus(20);
。如果您愿意,您需要让.plus()
返回Time
:
class Time {
public:
Time &plus(Time t);
Time &plus(int x);
...
};
我继续前进,并通过引用返回Time
,这样当您按照自己的方式链接函数时,下一个plus
仍会修改原始对象的第一个plus
被召唤了!如果您实现plus
函数,我们可以这样做:
Time &Time::plus(Time t) {
min += t.min;
if (min > 59) {
hour++;
min = min - 60;
}
return *this; //return ourselves so that the next func will be called on us too!
}
Time &Time::plus(int x) {
min += x;
if (min > 59) {
hour++;
min = min - 60;
}
return *this; //return ourselves so that the next func will be called on us too!
}