无运算符超载时的代码错误
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
,现代编译器会忽略该关键字,旧编译器仅将其用作提示,并自行决定是否内联该函数。他们非常擅长 ;-)
我有一个 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
,现代编译器会忽略该关键字,旧编译器仅将其用作提示,并自行决定是否内联该函数。他们非常擅长 ;-)