c++ error C2662 cannot convert 'this' pointer from 'const Type' to 'Type &'

你说的曾经没有我的故事 提交于 2019-11-27 11:47:05

问题


I am trying to overload the c++ operator== but im getting some errors...

error C2662: 'CombatEvent::getType' : cannot convert 'this' pointer from 'const CombatEvent' to 'CombatEvent &'

this error is at this line

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

see the code bellow:

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;
}

can anybody help?


回答1:


CombatEventType getType();

needs to be

CombatEventType getType() const;

Your compiler is complaining because the function is being given a const object that you're trying to call a non-const function on. When a function gets a const object, all calls to it have to be const throughout the function (otherwise the compiler can't be sure that it hasn't been modified).




回答2:


change the declaration to :

CombatEventType getType() const;

you can only call 'const' members trough references to const.




回答3:


It's a const issue, your getType method is not defined as const but your overloaded operator arguments are. Because the getType method is not guaranteeing that it will not change the class data the compiler is throwing an error as you can't change a const parameter;

The simplest change is to change the getType method to

CombatEventType getType() const;

Unless of course the method is actually changing the object.



来源:https://stackoverflow.com/questions/12068301/c-error-c2662-cannot-convert-this-pointer-from-const-type-to-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!