'.expression'左边必须有class / struct / union

时间:2018-05-01 23:15:06

标签: c++ class compiler-errors

在这段代码中,我有一个包含两个变量小时和分钟的对象。我试图连续向一个名为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;
}

1 个答案:

答案 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!
}