перегрузка оператора () для структуры - PullRequest
2 голосов
/ 29 февраля 2012

Я пытаюсь использовать структуру для моей карты в 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 <_Tp> :: operator () (const _Tp &, const _Tp &) const[с _Tp = мембрана :: индекс] ': /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h: 347: создается из '_Tp & std :: map <_Key, _Tp, _Compare, _Alloc> :: operator [] (const _Key &) [with _Key = мембрана :: index, _Tp = std :: set, std:: less>, std :: allocator>>, _Compare = std :: less, _Alloc = std :: allocator, std :: less>, std :: allocator>

] 'memMC.cpp: 551: создается здесь

Что, насколько я могу судить, означает, что мне нужно перегрузить оператор ().Однако я не знаю, что обычно делает этот оператор, поэтому я не знаю, как правильно его перезаписать.Википедия говорит мне, что это оператор приведения, но я не думаю, что они возвращают bool ...

Сбой компилятора при первой попытке доступа к элементу карты с помощью оператора [].

Ответы [ 2 ]

10 голосов
/ 29 февраля 2012

Попробуйте сделать conmaprison const:

struct index{
  int x;
  int y;
 int z;
  bool operator<(const index &b) const
                               //^^^^^ Missing this,
4 голосов
/ 29 февраля 2012

Попробуйте бесплатную перегрузку:

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