二进制表达式的操作数无效('const'和'const')

时间:2016-05-18 13:30:49

标签: c++

我是C ++菜鸟,所以如果你发现这个问题,请不要小心

我在下面用C ++声明地图:

std::map<CartesianLocation, std::list<RadioSignal<RadioDevice>>> radioMap;

完整代码:

不知道但是使用下面的代码,我能够解决我的问题类RadioMap:public std :: iterator_traits,public Cloneable { 私人:

std::map<const CartesianLocation*, const std::list<RadioSignal<RadioDevice>>*> radioMap;
std::vector<RadioDevice> radioDevices;

公共:     void add(const CartesianLocation * location,const std :: list&gt; * observedSignals){         radioMap [location] = observedSignals;     }

在这一行radioMap[location] = observedSignals;上,我以此错误结束了

  

“二进制表达式的操作数无效('const CartesianLocation'和   'const CartesianLocation')“在struct _LIBCPP_TYPE_VIS_ONLY上:   binary_function&lt; _Tp,_Tp,bool&gt; {       _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY       bool operator()(const _Tp&amp; __x,const _Tp&amp; __y)const           {return __x&lt; __y;}};

知道我哪里错了吗?

1 个答案:

答案 0 :(得分:2)

您没有为std::map提供比较器,因此它使用std::less。但是std::less CartesianLocation并没有超载(而CartesianLocation没有operator<),所以你会收到错误。

您可以添加operator<

struct CartesianLocation
{
    //Other stuff
    bool operator<(const CartesianLocation& loc2)
    {
        //Return true if this is less than loc2
    }
};

另一种方法是定义自定义比较器,例如:

struct comp
{
    bool operator()(const CartesianLocation& loc1, const CartesianLocation& loc2)
    {
        //Compare the 2 locations, return true if loc1 is less than loc2
    }
};

然后您可以将其传递给std::map

std::map<CartesianLocation, std::list<RadioSignal<RadioDevice>>, comp> radioMap;