Проблема с оператором == - PullRequest
       25

Проблема с оператором ==

1 голос
/ 07 декабря 2009

Я столкнулся с некоторой проблемой с использованием оператора == в следующей программе на С ++.

#include < iostream>
using namespace std;

class A
{
    public:
        A(char *b)
        {
            a = b;
        }
        A(A &c)
        {
            a = c.a;
        }
        bool operator ==(A &other)
        {
            return strcmp(a, other.a);
        }
    private:
        char *a;
};


int main()
{
    A obj("test");
    A obj1("test1");

    if(obj1 == A("test1"))
    {
        cout<<"This is true"<<endl;
    }
}

Что не так с if(obj1 == A("test1")) строкой ?? Любая помощь приветствуется.

Ответы [ 4 ]

34 голосов
/ 07 декабря 2009

strcmp возвращает 0, когда строки равны, поэтому вы хотите:

return strcmp(a, other.a) == 0;

Вы также должны использовать ссылку const, как говорит Кэтэлин Питиlin в своем ответе, потому что тогда вы можете использовать временные объекты с оператором, и вы должны также сделать сам метод const (поскольку он не изменяет объект), как Андреас Бринк говорит в комментариях ниже. Таким образом, ваш метод должен быть:

bool operator ==(const A &other) const
{
        return strcmp(a, other.a) == 0;
}
3 голосов
/ 07 декабря 2009
bool operator ==( const A &other)

Используйте константную ссылку, поэтому временный объект, который создается в операторе if, может использоваться как параметр для оператора ==.

2 голосов
/ 07 декабря 2009

Мне кажется, что вы хотите это в вашем операторе:

strcmp(a, other.a) == 0

strcmp возвращает 0 при совпадении строк и число, указывающее, больше или меньше сравнение, чем в противном случае.

0 голосов
/ 07 декабря 2009

Ваша ошибка в том, что вы создаете мгновенное значение и передаете его как ссылку на метод operator==. Но ваша ошибка в определении вашего оператора, которое должно быть:

оператор bool == (const A и другие) const

тело такое же.

...