我使用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)... 任何人都知道为什么会这样,以及如何解决它?
答案 0 :(得分:1)
您的inline bool operator==(const clsInventoryItem& other)
应该是常数
要解决此问题,您需要将inline bool operator==(const clsInventoryItem& other)
更改为inline bool operator==(const clsInventoryItem& other) const
。
此外,您可以删除关键字inline
,现代编译器将忽略该关键字,而较旧的编译器仅将其用作提示,并决定是否自行内联函数。他们相当擅长; - )