无运算符超载时的代码错误

Code errors at no operator overload

我有一个 class 使用 std::vector> 来指示项目及其数量(可以有多个包含相同项目的库存项目)。

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

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

而且还是报equals函数没有重载的错误(“严重性代码描述项目文件行抑制状态 错误 C2678 二进制“==”:未找到接受类型为 'const BrawlerEngineLib::clsInventoryItem' 的左手操作数的运算符(或没有可接受的转换)BrawlerEngineLib d:\program files (x86)\microsoft visual studio17\community\vc\tools\msvc .10.25017\include\utility 290 “)... 任何人都知道为什么会这样,以及如何解决它?

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

此外,您可以去掉关键字 inline,现代编译器会忽略该关键字,旧编译器仅将其用作提示,并自行决定是否内联该函数。他们非常擅长 ;-)