演算子のオーバーロードに少し問題があります。私は2つのクラスを持っています。
#include <iostream>
using namespace std;
class Meter; //Forward declaration
class Inch{
private:
double inches;
public:
Inch() : inches(0) {}
Inch(double i) { inches=i; }
friend Inch operator+ (const Meter& m, const Inch& i);
void out(){ cout << "Inch:" << inches << "\n"; }
double getInches() const { return inches; }
};
と
class Meter{
private:
double meter;
public:
Meter() : meter(0) {}
Meter(double m) { meter=m; }
Meter operator+ (const Inch& i) { return Meter(meter + i.getInches() * 0.0254); }
void out(){ cout << "Meter:" << meter; }
double getMeter() const { return meter; }
};
Inch operator+ (const Meter& m, const Inch& i)
{ return Inch(m.getMeter()/0.0254 + i.getInches()); }
主に、これらのクラスのそれぞれの 1 つがあります。それらを順序とともに追加する必要m + i;
があります。つまり、m が最初のオブジェクトでなければなりません。そのために、フレンド関数を使用して、2 つのオブジェクトをパラメーターとして使用しました。
Inch i(6.4), resultInch;
Meter m(14), resultMeter;
i.out();
m.out();
resultMeter = m + i;
resultMeter.out();
resultInch = m + i;
resultInch.out();
上記でresultMeter
、正しい値を保持しますが、resultInch
コンパイラーを配置すると、「bla bla bla に一致しないエラー」が表示されます。
私は何が欠けていますか?