まずはあなたの手がかりに感謝します。C++:2つの異なるクラスで同じ演算子をオーバーロードしているときの問題
課題を完了しようとする際に特に問題があります。私は、名前空間、ヘッダファイル、およびこれらすべてのものに間違ったものがあることは間違いないと確信していますが、実際に何がうまくいかないかはわかりません。
ポイントはこれです:2つの異なるクラス(それぞれCar
とCarShop
としましょう)が必要です。これらのクラスのそれぞれは、演算子+をオーバーロードする必要があります。
Car
- >Car &operator+(const Car &c)
(2台の車を "追加" する必要があり)CarShop
- >CarShop &operator+(const Car &c)
(既存CarShopに車を "追加" する必要があり)
ファイルCarShop.h
で、私のようにする必要があり#include "car.h"
、これは異なる "car"オブジェクトで多く動作するためです。さらに、私の主なテストクラスでは、main.cpp
と言うと、#include "car.h"
と#include "carshop.h"
も必要です。
エラーメッセージが表示されます。 Visual Studio(IDEとして使用しています)では、「LNK1169 & LNK2005」というエラーが表示され、「1つ以上のシンボルが同時に定義されています」というエラーが表示されます。
誰でも私を助けてくれますか? 2人のオーバーロードされたオペレータの間のこの衝突を避けるために、私は何をすべきですか?
PS。両方とも(2つのオーバーロードされた演算子)、(.hファイル内の)それぞれのクラスのフレンド関数として宣言され、それぞれの.cppファイルで実装されます。
(1)コードをご記入ください。エラーを引き起こすコードを見ることなく、エラーを診断することは困難です。 (2)「2台の車を追加する」とはどういう意味ですか? (3) 'operator +'は組み込みの '+'の振る舞いに従うならば、参照ではなく値で返さなければなりません:オペランドのいずれかを変更してはならず、新しいオブジェクトを返すべきです。オペランドの1つを変更する場合は、 'operator + ='の使用を検討する必要があります。 –
.hファイルに '#define'ガードがありますか? – Richard
あなたの質問には矛盾があります。あなたが表示する関数宣言は、メンバー関数の演算子オーバーロードですが、オーバーロードが "friend関数として宣言されている"と言います。どちらですか? –