Hoe een “ongeldige operanden naar binaire expressie”-fout oplossen?

Ik heb geen ervaring met het gebruik van c++ en zit vast op het punt waar de compiler ongeldige operanden voor binaire expressie genereert

class Animal{
public:
    int weight;
};
int main(){
    Animal x, y;
    x.weight = 33;
    y.weight = 3;
    if(x != y) {
    // do something
     }
}

Ik wil x gebruiken en vergelijken met y, zonder de code te wijzigen, d.w.z. (x.weight != y.weight) in de hoofdcode. Hoe moet ik dit probleem benaderen vanuit een externe klasse of definitie?


Antwoord 1, autoriteit 100%

Als alternatief kunt u de overbelasting van de operator toevoegen als niet-lid:

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

Antwoord 2, autoriteit 100%

Zoals gesuggereerd in de opmerkingen, moet u bijvoorbeeld de operator !=overbelasten

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

Een uitdrukking x != yis als een functieaanroep naar deze operator, in feite is het hetzelfde als x.operator!=(y).

p>

Other episodes