2016-05-25 4 views
3

Ich steckte schlecht auf dieses Problem, ich versuche, ein Objekt in der Liste mit find() zu finden. Unten ist der Code:Ungültige Operanden für binären Ausdruck ('RadioDevice' und 'const RadioDevice')

std::vector<RadioDevice> radioDevices; 
public: 
void add(CartesianLocation location, std::list<RadioSignal<RadioDevice>> observedSignals){ 
    for(RadioSignal<RadioDevice> radioSignal : observedSignals) { 
     if (std::find(radioDevices.begin(), 
         radioDevices.end(), 
         radioSignal.getRadioDevice()) != radioDevices.end()) { 
      radioDevices.push_back(radioSignal.getRadioDevice()); 
     } 
    } 
} 

RadioSignal RadioDevice, die eine reine abstrakte Klasse ist erweitert. Ich erhalte unter Fehlern bei if (*__first == __value_) in find()

Ungültige Operanden binären Ausdruck ('RadioDevice' und 'const RadioDevice')

+1

Wie sieht der Operator '= 'für' RadioDevice' aus? – NathanOliver

+0

RadioDevice ist eine reine virtuelle Klasse. Klasse RadioDevice { public: virtuelle std :: string getMacAddress(); virtueller RadioDeviceType getType(); virtuelles Doppel getFrequency(); virtuelle std :: string getIdentifier(); virtueller void setIdentifier (std :: string identifier); virtueller Int getTxPower(); }; – Tarun

+0

'std :: find' erfordert, dass Sie für die Typen, mit denen es arbeitet, einen' operator == 'definiert haben. Sie müssen also einen definieren. – Zack

Antwort

2

Also, vorausgesetzt, Sie haben eine Klasse RadioDevice wie folgt definiert:

class RadioDevice { 
public: 
    virtual std::string getMacAddress(); 
    virtual RadioDeviceType getType(); 
    virtual double getFrequency(); 
    virtual std::string getIdentifier(); 
    virtual void setIdentifier(std::string identifier); 
    virtual int getTxPower(); 
}; 

Sie müssen eine operator== für Ihre RadioDevice Klasse definieren. Sie können das tun, indem

bool operator==(const RadioDevice& rhs, const RadioDevice& lhs) { 
    return rhs.getIdentifier() == lhs.getIdentifier(); 
} 

Zugabe, aber dies setzt voraus, dass zwei RadioDevice Objekte gleich sind, wenn sie die gleichen Bezeichner haben.

+0

Doing so, gibt mir diesen Fehler- Überladene 'operator ==' muss ein binärer Operator sein (hat 3 Parameter). Ich weiß nicht, wo ich falsch liegen könnte – Tarun

+0

In dem Beispiel, das ich gab, ist Operator == eine freie Funktion, nicht in einer Klassendefinition. – Zack

+0

Danke Zack, ich habe spät verstanden, aber das hat mein Problem gelöst. – Tarun

Verwandte Themen