C++错误C2662:无法将“this”指针从“const Type”转换为“Type&”

33

我试图重载C++的运算符==,但是出现了一些错误...

Error 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个回答

70
CombatEventType getType();

需要被

CombatEventType getType() const;

你的编译器提示错误是因为该函数被给定了一个const对象,而你正在尝试调用一个非const函数。当一个函数接收到一个const对象时,在函数内部所有对它的调用都必须是const的(否则编译器无法确保它没有被修改)。


9

将声明更改为:

CombatEventType getType() const;

只有通过对常量的引用才能调用“const”成员。


5

这是一个常量问题,您的getType方法没有定义为常量,但是您重载的运算符参数是常量。由于getType方法不能保证不更改类数据,因此编译器会抛出错误,因为您无法更改常量参数;

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

CombatEventType getType() const;

除非该方法实际上是改变对象,否则不要这样做。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接