У меня есть вектор, заполненный значениями настраиваемого типа, и алгоритм find() жалуется, что не может найти подходящий оператор == для сравнения значений. Я реализовал это следующим образом:C++ - оператор не найден
bool Ship::operator==(const Ship& source) {
return (_type == source._type &&
_damagedSquares == source._damagedSquares &&
_orientation == source._orientation && _state == source._state);
}
Я также пробовал метод «друга», но это тоже не работает. Сам класс структурирована следующим образом:
class Ship {
private:
ShipType _type;
int _damagedSquares;
ShipOrientation _orientation;
ShipState _state;
public:
Ship();
Ship(ShipType type);
~Ship();
bool operator==(const Ship& source);
};
Что я здесь делаю неправильно?
Дополнительная информация:
std::vector<Ship> remainingShips;
MultiArray& squares = opponentGridCopy.GetSquares();
for (RowIterator rowIterator = squares.begin(); rowIterator != squares.end();
++rowIterator) {
for (ColumnIterator columnIterator = rowIterator->begin();
columnIterator != rowIterator->end(); ++columnIterator) {
Square* current = &(*columnIterator);
SquareState currentState = current->GetState();
if (currentState != SquareState::Hit)
current->SetState(SquareState::Vacant);
Ship* potentialShip = current->GetOwner();
if (potentialShip != nullptr) {
int damagedSquares = potentialShip->GetDamagedSquares();
if (!damagedSquares) {
current->SetState(SquareState::Populated);
break;
}
if (remainingShips.empty() ||
std::find(remainingShips.begin(), remainingShips.end(),
potentialShip) ==
remainingShips.end()) // should be *potentialShip
remainingShips.push_back(*potentialShip);
}
}
}
return remainingShips;
Я проходил указатель в качестве сравнения значения ... Просто разыменовываются его и найти() теперь работает.
Не могли бы вы показать свой контейнер и вызов 'std :: find'? – P0W
Вы используете 'std :: vector'? Вышеуказанный код в порядке –
@Venom Не могли бы вы показать полное сообщение об ошибке? –