Я создал некоторый объект с перегруженным оператором == в нем.Могу ли я использовать оператор == для указателей?
class Corridor
{
public:
Corridor(int iStart, int iEnd);
~Corridor();
// Overloaded operators to simplify search in container.
friend bool operator==(const Corridor& lhs, const int rhs);
friend bool operator==(const int lhs, const Corridor& rhs);
protected:
int m_iIntersectionIDStart;
int m_iIntersectionIDEnd;
};
В этом случае, если я где-то создать вектор коридорами:
vector<Corridor> m_vCorridors;
proggram работает отлично, и я могу использовать найти алгоритм:
auto itCorridor = find(m_vCorridors.begin(), m_vCorridors.end(), someID);
НО в случае, если Я создаю вектор указателей:
vector<Corridor*> m_vCorridors;
Я получаю ошибки: Ошибка 1 ошибка C2446: '==': нет преобразования из 'const int' в 'Corridor *' c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ include \ algorithm 41 Ошибка 2 ошибки C2040: '==': 'Коридор *' отличается в уровнях косвенности от 'const int' c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ include \ algorithm 41
Пробовал overload operator == по-разному, но это не работает для этого случая. Кто-нибудь знает, что я должен сделать, чтобы решить проблему?
Посмотрите 'find_if'. –
Предупреждение: если ваша реализация 'operator ==' tests 'if (intValue> = m_iIntersectionIDStart && intValue <= m_iIntersectionIDEnd)', ваш оператор равенства не удовлетворяет переходному отношению: возможно иметь значения 'int'' a' и 'c' и экземпляр' Corridor' 'b', такой, что' a == b' и 'b == c', но' a! = c'. Я бы рекомендовал вместо этого определить функцию-член, например. 'Contains (int)' для проверки этого отношения вместо этого, чтобы избежать возможных ошибок и путаницы. –