У меня есть классПравильно перегружать двойные равные для класса вытекающего из станда :: вектор
class Item {
int _one;
int _two;
int _three;
// other stuff
};
class ItemList : public std::vector<Item> {
// deriving from std vector because the ctor needs to
// perform some work in discriminating what gets added
// to the list
};
Я читал многие из аргументов против вывода из станд :: вектора <> и я думаю, что я буду быть в порядке, потому что этот класс не должен быть получен. Я выставляю это на python, используя пакет индексирования ускорения, чтобы выступать в качестве списка python. Потому что мне нужен конструктор, чтобы сделать какую-то работу в устранении определенных элементов из списка во время строительства, я решил пойти по этому пути вместо того, чтобы делать то, что я сделал в другом месте в проекте:
class AnotherItem {
// class definition
};
typedef std::vector<AnotherItem> AnotherItemList
А потом выставить список с пакетом индексации индекса ускорения с использованием typedef. Все кажется хорошо, за исключением того, что у меня есть эта ошибка: Ошибка 2 ошибки C2678: двоичный '==': оператор не найден, который принимает левый операнд типа «Item» (или нет приемлемого преобразования)
Ошибка не исходит от библиотек boost, а что-то в коде алгоритма std. Я попытался добавить свой собственный перегруженный оператор ==, но это не устранило проблему. Это выглядит так:
class Item {
// earlier stuff
bool operator==(Item& rhs) {
return (_one == rhs._one && _two == rhs._two && _three == rhs._three);
}
bool operator!=(Item& rhs) {
return !(*this == rhs);
}
};
Это не устранило проблему. Что мне не хватает? Эта ссылка here показывает, что оператор == для вектора НЕ является функцией-членом. Я попытался перегрузиться на «глобальном» уровне (например, не в пространстве имен), но это тоже не помогло. Итак, что мне не хватает?
Спасибо, Энди
Ваша первая проблема связана с 'std :: vector' .. не наследуют от типов, которые не были наследованы. Вместо этого используйте композицию (т. Е. Сохраните 'std :: vector' внутри). –
Вы должны сделать 'operator ==' и 'operator! =' Const-correct. (т. е. 'bool operator == (const Item & rhs) const {...') – Cornstalks
Помимо обычного наследования от векторных проблем, говорит ли ошибка о том, что ожидается на RHS? И он дает какие-то близкие матчи? – juanchopanza