C++ 二进制表达式(';RadioDevice';和';const RadioDevice';)的操作数无效
我在这个问题上陷入了困境,我正在尝试使用find()在列表中查找一个对象。代码如下:C++ 二进制表达式(';RadioDevice';和';const RadioDevice';)的操作数无效,c++,c++11,C++,C++11,我在这个问题上陷入了困境,我正在尝试使用find()在列表中查找一个对象。代码如下: std::vector<RadioDevice> radioDevices; public: void add(CartesianLocation location, std::list<RadioSignal<RadioDevice>> observedSignals){ for(RadioSignal<RadioDevice> radioSignal
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());
}
}
}
std::矢量无线电设备;
公众:
无效添加(笛卡尔位置,标准::列出观测信号){
用于(无线电信号无线电信号:观测信号){
if(std::find(radioDevices.begin()),
radioDevices.end(),
radioSignal.getRadioDevice())!=radioDevices.end(){
radioDevices.push_back(radioSignal.getRadioDevice());
}
}
}
RadioSignal扩展了RadioDevice,它是一个纯抽象类。
如果find()中的(*\uuuu first==\uu value),我在处得到以下错误
二进制表达式('RadioDevice'和'const RadioDevice'的操作数无效)
因此,假设您有一个类无线电设备定义为:
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();
};
您需要为您的无线设备
类定义一个操作符==
。您可以通过添加
bool operator==(const RadioDevice& rhs, const RadioDevice& lhs) {
return rhs.getIdentifier() == lhs.getIdentifier();
}
但是,这假设两个RadioDevice
对象具有相同的标识符时是相等的。用于RadioDevice
的操作符==
看起来像什么?RadioDevice是一个纯虚拟类。类无线设备{public:virtual std::string getMacAddress();virtual RadioDeviceType getType();virtual double getFrequency();virtual std::string getIdentifier();virtual void setIdentifier(std::string identifier);virtual int getxpower();}std::find
要求您为其工作的类型定义了一个运算符==
。因此,您需要定义一个。@TarunGupta请在问题中添加代码,而不是在注释中。@TarunGupta那么您将遇到更多问题,而不仅仅是std::find
,因为您只存储RadioDevice
实例,而不是指针,您正在切片所有对象。这样做,给我这个错误-重载的“operator==”必须是一个二进制运算符(有3个参数)。我不知道在我给出的示例中,运算符==是一个自由函数,不在类定义中。谢谢Zack,我理解得很晚,但这解决了我的问题。