web-dev-qa-db-fra.com

Comment corriger une erreur "opérandes invalides pour l'expression binaire"?

Je n'ai aucune expérience de l'utilisation de c ++ et je suis bloqué au point où le compilateur génère opérandes invalides pour l'expression binaire

class Animal{
public:
    int weight;
};

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

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

Je veux utiliser x et comparer avec y, sans modifier le code, c'est-à-dire (x.weight! = Y.weight) dans le code principal. Comment dois-je aborder ce problème à partir d'une classe ou d'une définition externe?

7
user2974866

Vous pouvez également ajouter la surcharge de l'opérateur en tant que non-membre:

#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;
    }
}
5
Sambuca

Comme suggéré dans les commentaires, vous devez surcharger l'opérateur !=, Par exemple

class Animal{
public:
    int weight;

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

Une expression x != y Est comme un appel de fonction à cet opérateur, en fait c'est la même chose que x.operator!=(y).

6
TobiMcNamobi