【发布时间】:2011-01-30 17:02:17
【问题描述】:
首先非常感谢您提供的线索。
我在尝试完成作业时遇到了一个特殊问题。我很确定命名空间、包含、头文件和所有这些东西都有问题,但我真的不知道出了什么问题。
重点是:我需要两个不同的类(比如说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保护吗? -
您的问题存在不一致之处:您显示的函数声明是针对成员函数运算符重载的,但随后您说重载“被声明为友元函数”。是哪个?
标签: c++ namespaces include operator-overloading