EDIT:
ОК, я разобрался с твоей проблемой. Это нереференсная версия operator==
. Это делает operator==
неоднозначным. Просто удалите его (как я изначально предлагал), и он будет работать нормально.
EDIT:
В ответ на ваши изменения вы все равно должны удалить первую версию operator==
Нет необходимости делать копию рассматриваемого объекта и затем сравнивать его. Второй operator==
выглядит разумно и должен работать. Есть ли что-то еще, что вы пропускаете?
EDIT:
Следующие компиляции просто отлично подходят для меня с использованием g ++ 4.4.1:
#include <iostream>
struct DistinctWord {
DistinctWord(const std::string &s) : strWord(s){}
bool operator==(const DistinctWord& W) const {
return strWord == W.strWord;
}
std::string strWord;
};
int main() {
DistinctWord* wordOne = new DistinctWord("Test");
DistinctWord* wordTwo = new DistinctWord("Test");
if(*wordOne == *wordTwo)
std::cout << "true";
else
std::cout << "false";
}
Если у вас все еще есть проблемы, значит, вы не показываете весь соответствующий код ...
Прежде всего, где определение для DistinctWord
и как оно относится к Word
?
Кроме того, вы должны сделать это:
bool Word::operator==(const Word& W) const {
return strWord == W.strWord;
}
и просто удалите два operator==
, которые у вас есть. Первый делает копию, затем сравнивает глупость, а второй сравнивает изменяемую ссылку и всегда возвращает истину, которая на самом деле не имеет смысла.
Этот должен работать нормально.