operator()重载结构

时间:2012-02-29 14:36:08

标签: c++ struct operator-overloading

我正在尝试在c ++中使用我的地图结构。结构很简单:

struct index{
  int x;
  int y;
  int z;
  bool operator<(const index &b){
    bool out = true;
    if ( x == b.x ){
      if ( y == b.y ){
        out = z < b.z;
      } else out = y < b.y;
    } else out = x < b.x;
    return out;
  }
};

但是当我编译时,我得到一个错误:

  

/usr/lib/gcc/x86_64-redhat-linux/4.1.2 /../../../../ include / c ++ / 4.1.2 / bits / stl_function.h:在成员函数中bool std :: less&lt; _Tp&gt; :: operator()(const _Tp&amp;,const   _Tp&amp;)const [with _Tp = membrane :: index]':       /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:347:   从'_Tp&amp; std :: map&lt; _Key,_Tp,_Compare,   _Alloc&gt; :: operator [](const _Key&amp;)[with _Key = membrane :: index,_Tp = std :: set,std :: less&gt;,   std :: allocator&gt; &gt;,_比较=   std :: less,_Alloc = std :: allocator,   std :: less&gt;,std :: allocator&gt;

     
    
      
        

]”             memMC.cpp:551:从这里实例化

      
    
  

据我所知,这意味着我需要重载()运算符。但是我不知道这个操作员通常做什么,所以我不知道如何正确覆盖它。维基百科告诉我,这是一个演员,但我不认为他们会回归布尔...

第一次尝试使用[]运算符访问地图元素时,编译器会崩溃。

2 个答案:

答案 0 :(得分:10)

尝试进行比较const:

struct index{
  int x;
  int y;
 int z;
  bool operator<(const index &b) const
                               //^^^^^ Missing this,

答案 1 :(得分:4)

尝试免费过载:

bool operator < (const index &a, const index &b)
{
    if (a.x == b.x)
    {
        if (a.y == b.y)
        {
            return a.z < b.z;
        }
        else
        {
            return a.y < b.y;
        }
    }
    else
    {
        return a.x < b.x;
    }
}