Постинкремент перегрузки операторов в C ++ - PullRequest
0 голосов
/ 04 ноября 2011

Это мое объявление перегрузки оператора постинкремента.

loc loc::operator++(int x)
{
    loc tmp=*this;
    longitude++;
    latitude++;
    retrun tmp;
} 

Мой конструктор класса

loc(int lg, int lt) 
{
   longitude = lg;
   latitude = lt;
}

В основной функции я кодировал, как показано ниже

int main()
{
    loc ob1(10,5);
    ob1++;
}

При компиляции я получаю следующую ошибку

opover.cpp: 56: 5: ошибка: прототип для 'loc loc :: operator ++ (int)' не соответствует ни одному в классе 'loc'opover.cpp: 49: 5: ошибка: кандидат: loc loc :: operator ++ () opover.cpp: в функции' int main () ': opover.cpp: 69: 4: ошибка: нет' оператор ++ (int)'объявлено для постфикса' ++ '

Ответы [ 3 ]

4 голосов
/ 04 ноября 2011

Исправьте объявление класса с

class loc
{
    // ...
    loc operator++();
} 

до

class loc
{
    // ...
    loc operator++(int);
} 

[ Редактировать . Удалены ошибочные замечания о возврате по значению.Возвращается значение конечно обычная семантика для постфиксного оператора ++]

3 голосов
/ 04 ноября 2011

у вас должно быть две версии ++:

loc& loc::operator++() //prefix increment (++x)
{
    longitude++;
    latitude++;
    return *this;
} 

loc loc::operator++(int) //postfix increment (x++)
{
    loc tmp(longtitude, langtitude);
    operator++();
    return tmp;
}

И, конечно, обе функции должны быть определены в прототипе класса:

loc& operator++();
loc operator++(int);
1 голос
/ 04 ноября 2011

Вы не объявили перегруженный оператор в определении класса.

Ваш класс должен выглядеть примерно так:

class loc{
public:
    loc(int, int);
    loc operator++(int);
    // whatever else
}

** редактировать **

После прочтения комментариев я заметил, что в вашем сообщении об ошибке указано, что вы объявили loc operator++(), поэтому просто исправьте это.

...