以下のコードは Distance クラスの一部です。演算子のオーバーロードは、Distance クラスのプライベート メンバーとして宣言されたフレンド関数であり、呼び出しようとしている関数はパブリック メンバーです。この関数は、Distance クラスのメンバー変数を変更しません。
2 つの参照渡しオブジェクト d1 と d2 を一定に保とうとしていますが、コンパイラは、これらの関数がプライベート変数を変更しないにもかかわらず、ConvertToInches 関数または距離クラス内にある任意の関数を呼び出して const プロパティに違反していると言っています。距離クラス内。
d1 と d2 を定数にしない場合、コンパイラは問題ありません。
この関数を呼び出すときに d1 と d2 を一定にする方法と、私が持っているものが機能しない理由を誰かが説明できますか?
ありがとう!
const Distance operator+(const Distance& d1, const Distance d2)
//this is a friend function
//declared in private section of Distance class
{
//this function is what causes problems !!!!!!!
d1.ConvertToInches(1, 2, 3, 4);
Distance d3 = 3;
return d3;
}
Distance::ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches)
//declared in public section of Distance class
{
cMiles = cMiles * 63360;
cYards = cYards *36;
cFeet = cFeet * 12;
int cSum = cMiles + cYards + cFeet + cInches;
return cSum;
}