开发者

c++ overload operator==

I have a class with the following

bool DistinctWord::operator==(c开发者_开发百科onst DistinctWord W) const
{
    return strWord == W.strWord;
}
bool DistinctWord::operator==(const DistinctWord& W) const 
{
    return strWord == W.strWord;
}

I'm doing this in my program

    DistinctWord* wordOne = new DistinctWord("Test");
    DistinctWord* wordTwo = new DistinctWord("Test");

    if(*wordOne == *wordTwo)
        cout << "true";
    else
        cout << "false";

I get this error

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'DistinctWord' (or there is no acceptable conversion) could be 'built-in C++ operator==(DistinctWord *, DistinctWord *

)'

I'm probably just not understanding the right way to overload.

Sorry for the simple question. TIA


EDIT:

OK, I've figured out your problem. It is the non-reference version of the operator==. It makes the operator== ambiguous. Simply remove it (as I originally suggested) and it'll work fine.


EDIT:

In response to your edit, you should still remove the first version of the operator== There is no need to make a copy of the object in question and then compare it. The second operator== looks reasonable and should work. Is there anything else you are leaving out?


EDIT:

The following compiles just fine for me using 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";
}

If you are still having problems, then you are not showing all relevant code...


First of all, where is the definition for DistinctWord and how does it relate to Word?

Beyond that, you should do this:

bool Word::operator==(const Word& W) const {
     return strWord == W.strWord;
}

and just remove the two operator=='s you currently have. The first is making a copy then comparing which is silly, and your second is comparing a modifiable reference and always returning true which doesn't really serve any purpose.

This one should work fine.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜