私は学校用のコードで作業しています。時間の追加と設定。今私が持っている問題は、 "+ ="演算子のオーバーロードです。エラーC2679の問題:バイナリ '+ =': 'int'型の右オペランドをとる演算子が見つかりません。
Time& Time::operator+=(Time& a) {
*this = a + *this;
return *this;
}
私はすでに「+」演算子をオーバーロードしているので、私はちょうど私の「+ =」演算子のためにそれに呼びかけています。 (私のint型のメインで
Time operator+(Time a, Time b) {
int sumhr = a.hour + b.hour;
int summin = a.minute + b.minute;
if (summin > 59) {
sumhr += summin/60;
summin = summin % 60;
}
if (sumhr > 23)
sumhr = sumhr % 24;
return Time(sumhr, summin);
}
Time operator+(Time a, int addminutes) {
Time t = a + Time(addminutes);
return t;
}
Time operator+(Time a, double addhours) {
Time t = a + Time(addhours);
return t;
}
)、私が使用しています:私はエラーになります
Time c(61);
c += 120;
cout << "\tc += 120;\t\t";
cout << "c = " << c << "\n";
を。 "+"演算子にすでにintとdoubleのパラメータがオーバーロードされているので、私が間違っていることがわかりません。
この問題を解決するにはどうすればよいですか?
完全なクラス定義と宣言があります。私はクラスを作成し、私の教授が提供するドライバに対してそれを実行しているので、int main()は変更できません。
#include <iostream>
using namespace std;
using std:: cout;
class Time {
private:
int hour;
int minute;
public:
Time();
Time(int min);
Time(int hr, int min);
Time(double hrs);
int minutes();
int hours();
Time& operator+=(Time& a);
void set_minutes(int min);
void set_minutes(double min);
void set_hours(int hr);
void set_hours(double hr);
friend ostream& operator<<(ostream& os, const Time& t);
friend Time operator+(Time a, Time b);
friend Time operator+(Time a, int addminutes);
friend Time operator+(Time a, double addhours);
friend bool operator<(Time a, Time b);
friend bool operator==(Time a, Time b);
friend bool operator>=(Time a, Time b);
friend bool operator!=(Time a, Time b);
};
Time::Time() {
hour = 0;
minute = 0;
}
Time::Time(int min) {
if (min > 59) {
hour = min/60;
minute = min % 60;
}
else {
hour = 0;
minute = min;
}
}
Time::Time(int hr, int min) {
if (min > 59) {
hour = min/60;
minute = min % 60;
}
else {
hour = hr;
minute = min;
}
if (hour > 23)
hour = hour % 24;
}
Time::Time(double hrs) {
double fraction = 0;
fraction = hrs - (int)hrs;
minute = fraction * 60;
hour = hrs - fraction;
if (hour > 23)
hour = hour % 24;
}
int Time::minutes() {
return minute;
}
int Time::hours() {
return hour;
}
ostream& operator<<(ostream& os, const Time& t)
{
if (t.minute > 9)
os << t.hour << ":" << t.minute;
else
os << t.hour << ":0" << t.minute;
return os;
}
Time operator+(Time a, Time b) {
int sumhr = a.hour + b.hour;
int summin = a.minute + b.minute;
if (summin > 59) {
sumhr += summin/60;
summin = summin % 60;
}
if (sumhr > 23)
sumhr = sumhr % 24;
return Time(sumhr, summin);
}
Time operator+(Time a, int addminutes) {
Time t = a + Time(addminutes);
return t;
}
Time operator+(Time a, double addhours) {
Time t = a + Time(addhours);
return t;
}
Time& Time::operator+=(Time& a) {
*this = a + *this;
return *this;
}
bool operator<(Time a, Time b) {
if (a.hour > b.hour)
return false;
else if (a.hour < b.hour)
return true;
else {
if (a.minute > b.minute)
return false;
else if (a.minute == b.minute)
return false;
else
return true;
}
}
bool operator==(Time a, Time b) {
if (a.hour != b.hour)
return false;
else {
if (a.minute != b.minute)
return false;
else
return true;
}
}
bool operator>=(Time a, Time b) {
if (a < b)
return false;
else
return true;
}
bool operator!=(Time a, Time b) {
if (a == b)
return false;
else
return true;
}
void Time::set_minutes(int min) {
minute = min % 60;
if (minute == 60) {
minute = 0;
}
}
void Time::set_minutes(double min) {
minute = (int)min % 60;
double rounding = min = (int)min;
if (rounding >= 0.5) {
minute += 1;
if (minute == 60) {
minute = 0;
}
}
}
void Time::set_hours(int hr) {
hour = hr % 24;
if (hour == 24)
hr = 0;
}
void Time::set_hours(double hr) {
hour = (int)hr % 24;
if (hour == 24)
hr = 0;
}
int main() {
Time a;
Time b(5);
Time c(61);
Time d(47, 59);
Time X(5.0);
Time Y(1.5);
Time Z(25.1);
cout << "Testing constructors:\n";
cout << "\tTime a;\t\t\t";
cout << "a = " << a << "\n";
cout << "\tTime b(" << b.minutes() << ");\t\t";
cout << "b = " << b << "\n";
cout << "\tTime c(61);\t\t";
cout << "c = " << c << "\n";
cout << "\tTime d(47,59);\t\t";
cout << "d = " << d << "\n";
cout << "\tTime X(5.0);\t\t";
cout << "X = " << X << "\n";
cout << "\tTime Y(1.5);\t\t";
cout << "Y = " << Y << "\n";
cout << "\tTime Z(25.1);\t\t";
cout << "Z = " << Z << "\n";
cout << "Testing operator+:\n";
cout << "\te = b + c;\t\te = " << b + c << "\n";
cout << "\tf = d + 2;\t\tf = " << 2 + d << "\n";
cout << "\tg = c + 2.75;\t\tg = " << 2.75 + c << "\n";
cout << "Testing operator+=:\n";
c += 120;
cout << "\tc += 120;\t\t";
cout << "c = " << c << "\n";
c += 1.99166666;
cout << "\tc += 1.99166666;\t";
cout << "c = " << c << "\n";
c += 1.99166667;
cout << "\tc += 1.99166667;\t";
cout << "c = " << c << "\n";
cout << "Testing other member functions:\n";
c.set_minutes(60);
cout << "\tc.set_minutes(60);\t";
cout << "c = " << c << "\n";
c.set_minutes(123.45);
cout << "\tc.set_minutes(123.45);\t";
cout << "c = " << c << "\n";
c.set_minutes(67.89);
cout << "\tc.set_minutes(67.89);\t";
cout << "c = " << c << "\n";
cout << "\tc.set_hours(45);\t";
c.set_hours(45);
cout << "c = " << c << "\n";
cout << "\tc.set_hours(1.9);\t";
c.set_hours(1.9);
cout << "c = " << c << "\n";
cout << "\tc.set_hours(1.9999);\t";
c.set_hours(1.9999);
cout << "c = " << c << "\n";
cout << "Testing comparison operators:\n";
if (b < c)
cout << b << " occurs earlier in the day than " << c << ", ";
if (!(b == c))
cout << "hence b != c.\n";
if (c >= b)
cout << c << " occurs later in the day than " << b << ", ";
if (b != c)
cout << "hence c != b.\n";
return 0;
}
明らかに、あなたの 'main'はこれらの追加の' + '演算子を見ることができず、それらの存在を知らないことは明らかです。どこで宣言していますか?あなたが投稿したビットとピースから把握することは不可能です。 – AnT
ちょうど完全なコードを投稿しました。 +演算子はフレンド演算子、+ =はメンバー演算子として持っています。 – coeurs
しかし、あなたのコードでは、右辺に 'int'を取る' + = '演算子は決して定義しませんでした。コンパイラがそれを見つけられないのも不思議ではありません。定義するか、使用しようとしないでください。 – AnT