У меня есть класс, использующий 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;
};
И все равно выдает ошибку, что функция equals не перегружена («Код серьезности Описание Состояние подавления строки файла проекта
Ошибка C2678 бинарная ‘==’: не найден оператор, который принимает левый операнд типа ‘const BrawlerEngineLib :: clsInventoryItem’ (или нет приемлемого преобразования) BrawlerEngineLib d: \ программные файлы (x86) \ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.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
современные компиляторы игнорируют ключевое слово, а старые компиляторы используют его только как подсказку и решают, стоит ли встроить функцию самостоятельно. Они довольно хороши в этом 😉
Других решений пока нет …