2014-10-15 2 views
6

Я неопытный использования C++ и застрял в точке, где компилятор генерирует недопустимые операнды в двоичном выраженииКак исправить ошибку «неправильные операнды в двоичное выражение»?

class Animal{ 
public: 
    int weight; 
}; 

int main(){ 
    Animal x, y; 
    x.weight = 33; 
    y.weight = 3; 

    if(x != y) { 
    // do something 
    } 
} 

Я хочу использовать х и сравните с у, без изменения кода, т.е. (x.weight! = y.weight) в основном коде. Как мне подойти к этой проблеме из внешнего класса или определения?

+4

определяют 'оператор Ьоо = (Animal сопзЬ & a1,! Animal const & a2) {a1.weight! = A2.weight; } ' – user657267

+4

оператор перегрузки'! = 'С вашей собственной реализацией .. –

+0

код в main() должен быть оставлен нетронутым –

ответ

3

В качестве альтернативы вы можете добавить перегрузку оператора, не являющегося членом:

#include <iostream> 
using namespace std; 

class Animal{ 
public: 
    int weight; 
}; 

static bool operator!=(const Animal& a1, const Animal& a2) { 
    return a1.weight != a2.weight; 
} 

int main(){ 
    Animal x, y; 
    x.weight = 33; 
    y.weight = 3; 

    if(x != y) { 
     cout << "Not equal weight" << endl; 
    } 
    else { 
     cout << "Equal weight" << endl; 
    } 
} 
4

Как указывается в комментариях, которые необходимо перегрузить оператор !=, например

class Animal{ 
public: 
    int weight; 

    bool operator!=(const Animal &other) 
    { 
     return weight != other.weight; 
    } 
}; 

Получено выражение x != y, как вызов функции для этого оператора, на самом деле это так же, как x.operator!=(y).

Смежные вопросы