30

我正在尝试重载 c++ operator== 但我遇到了一些错误...

错误 C2662:“CombatEvent::getType”:无法将“this”指针从“const CombatEvent”转换为“CombatEvent &”

这个错误在这一行

if (lhs.getType() == rhs.getType())

见下面的代码:

class CombatEvent {

public:
    CombatEvent(void);
    ~CombatEvent(void);

    enum CombatEventType {
        AttackingType,
        ...
        LowResourcesType
    };

    CombatEventType getType();
    BaseAgent* getAgent();

    friend bool operator<(const CombatEvent& lhs, const CombatEvent& rhs) {

        if (lhs.getType() == rhs.getType())
            return true;

        return false;
    }

    friend bool operator==(const CombatEvent& lhs, const CombatEvent& rhs) {

        if (lhs.getType() == rhs.getType())
            return true;

        return false;
    }

private: 
    UnitType unitType;
}

有人可以帮忙吗?

4

4 回答 4

66
CombatEventType getType();

需要是

CombatEventType getType() const;

您的编译器正在抱怨,因为该函数被赋予了一个const您试图在其上调用非const函数的对象。当一个函数获取一个const对象时,对它的所有调用都必须在const整个函数中进行(否则编译器无法确定它没有被修改)。

于 2012-08-22T07:36:44.657 回答
8

将声明更改为:

CombatEventType getType() const;

您只能通过对 const 的引用来调用“const”成员。

于 2012-08-22T07:36:54.183 回答
5

这是一个 const 问题,您的 getType 方法未定义为 const 但您的重载运算符参数是。因为 getType 方法不能保证它不会更改类数据,所以编译器会抛出错误,因为您无法更改 const 参数;

最简单的更改是将 getType 方法更改为

CombatEventType getType() const;

当然,除非该方法实际上正在更改对象。

于 2012-08-22T07:46:33.280 回答
0

我用类似的代码看到了这个错误

    get_color(const std::unsigned_integral auto &x,
              const std::unsigned_integral auto &y,
              const BPPT &                       depth,
              const std::unsigned_integral auto &palette    = 0U,
              const std::unsigned_integral auto &texture_id = 0U) const

当我更改为模板时,它起作用了。

  template<std::unsigned_integral xT,
           std::unsigned_integral yT,
           std::unsigned_integral paletteT,
           std::unsigned_integral texture_idT>
  [[nodiscard]] Color16
    get_color(const xT          x,
              const yT          y,
              const BPPT        depth,
              const paletteT    palette    = 0U,
              const texture_idT texture_id = 0U) const
于 2021-05-13T16:01:03.683 回答