Прежде всего, спасибо за ваши подсказки.C++: проблема при перегрузке одного и того же оператора в двух разных классах
У меня возникли проблемы при попытке выполнить задание. Я уверен, что что-то не так с пространствами имен, включает в себя файлы заголовков и все это, но не знаю, что происходит.
Дело в том, что мне нужны два разных класса (допустим, Car
и CarShop
), каждый из которых должен перегрузить оператор +.
Car
->Car &operator+(const Car &c)
(должен "добавить" две машины)CarShop
->CarShop &operator+(const Car &c)
(должен "добавить" машину к существующему CarShop)
В файле CarShop.h
, мне нужно #include "car.h"
, так как он много работает с различными «автомобильными» объектами. Более того, в моем основном тестовом классе, скажем, main.cpp
, мне также нужно #include "car.h"
и #include "carshop.h"
.
Здесь я получаю сообщение об ошибке. Visual Studio (мы работаем с ней как с нашей IDE) дает мне «LNK1169 & LNK2005» ошибки, объясняя, что «один или несколько символов определены одновременно».
Кто-нибудь может мне помочь? Что мне делать, чтобы избежать конфликта между двумя перегруженными операторами?
PS. Оба из них (2 перегруженных оператора) объявляются как функции друзей для своих классов (в файлах .h) и реализованы в их соответствующем файле .cpp.
(1) Пожалуйста, внесите ваш код; не видя кода, вызывающего ошибки, ошибки трудно диагностировать. (2) Что значит «добавить две машины»? (3) Ваш 'operator +' должен возвращать по значению, а не по ссылке, если он следует за поведением встроенного '+': он не должен мутировать ни один из его операндов и должен возвращать новый объект. Если вы хотите изменить один из операндов, вам следует использовать 'operator + ='. –
У ваших файлов .h есть '# define' охранники? – Richard
В вашем вопросе есть несогласованность: объявления функций, которые вы показываете, предназначены для перегрузки операторов-членов, но тогда вы говорите, что перегрузки «объявляются как функции друзей». Что он? –