无操作员超载时的代码错误

时间:2017-10-02 21:44:50

标签: c++ operator-overloading operator-keyword equals-operator

我使用std :: vector>获得了一个课程。指示项目及其计数(可以有多个包含相同项目的清单项目。)

然后我继续重载clsInventoryItem它的==运算符。 设置最终是: clsInventory.cpp - >包括:clsInventory.h clsInventory.h - >包括:clsInventoryItem.h clsInventoryItem.h - >包括:stdafx.h(其中包括项目的其余部分,不包括那2个头文件)

clsInventoryItem在其头文件中包含以下内容:

class clsInventoryItem
{
public:
    clsInventoryItem( clsItem* Item, char Quality );
    clsItem* GetItem( );
    char GetQuality( );

    inline bool operator==( const clsInventoryItem& other )
    { /* do actual comparison */
        if (m_Item == other.m_Item
             && m_Quality == other.m_Quality)
        {
            return true;
        }
        return false;
    }
private:
    clsItem* m_Item;
    char m_Quality;
};

它仍然会给出一个错误,即等于函数不会被重载("严重级代码描述项目文件行抑制状态 错误C2678二进制' ==':找不到运算符,该运算符采用类型为' const BrawlerEngineLib :: clsInventoryItem'的左手操作数。 (或者没有可接受的转换)BrawlerEngineLib d:\ program files(x86)\ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.10.25017 \ include \ utility 290 &#34)... 任何人都知道为什么会这样,以及如何解决它?

1 个答案:

答案 0 :(得分:1)

您的inline bool operator==(const clsInventoryItem& other)应该是常数 要解决此问题,您需要将inline bool operator==(const clsInventoryItem& other)更改为inline bool operator==(const clsInventoryItem& other) const

此外,您可以删除关键字inline,现代编译器将忽略该关键字,而较旧的编译器仅将其用作提示,并决定是否自行内联函数。他们相当擅长; - )