Подтвердить что ты не робот

С++ ошибка C2662 не может преобразовать указатель 'this' из 'const Type' в 'Type &'

Я пытаюсь перегрузить оператор С++, но im получает некоторые ошибки...

ошибка 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;
}

может кто-нибудь помочь?

4b9b3361

Ответ 1

CombatEventType getType();

должно быть

CombatEventType getType() const;

Ваш компилятор жалуется, потому что функции присваивается объект const, на который вы пытаетесь вызвать функцию non const. Когда функция получает объект const, все вызовы должны быть const во всей функции (иначе компилятор не может быть уверен, что он не был изменен).

Ответ 2

измените объявление на:

CombatEventType getType() const;

вы можете вызывать только члены 'const' через ссылки на const.

Ответ 3

Это проблема с константой, ваш метод getType не определяется как const, но ваши перегруженные аргументы оператора. Поскольку метод getType не гарантирует, что он не изменит данные класса, компилятор выдаст ошибку, поскольку вы не можете изменить параметр const;

Самое простое изменение заключается в изменении метода getType на

CombatEventType getType() const;

Если, конечно, метод фактически не изменяет объект.