Ошибка перегрузки операторов

229
30 сентября 2017, 22:51
struct subject
{
    int c;
    int m;
};
const bool operator > ( subject* first, subject* second )
{
    return first->c > second->c;
}

Ошибка:

Overloaded 'operator>' must have at least one parameter of class or enumeration type. 

Что не так?

Answer 1

Перегруженные операторы в языке С++ перегружаемы только для класс-типов или enum-типов. Любой перегруженный оператор должен иметь как минимум один параметр класс-типа или enum-типа (или являться ссылкой на такие типы).

У вас оба параметра перегруженного оператора имеют тип "указатель". Тип "указатель" не является ни класс-типом или enum-типом. Поэтому ваша перегрузка не является корректной.

Вот что не так.

А что с этим делать - зависит от того, чего именно вы пытаетесь достичь и почему вдруг вы пытаетесь перегрузить оператор именно для указателей. Ваш вопрос не очень-то богат деталями на эту тему.

Answer 2

Агрументами в данном случае должны быть экземпляры или ссылки (лучше, константные), а не указатели. А вот const при возвращаемом значении - ни к чему. То есть:

bool operator > ( const subject& first, const subject& second )
{
    return first.c > second.c;
}
READ ALSO
Не удается инициализировать ссылку

Не удается инициализировать ссылку

VS пишет что не может инициализировать ссылки (&char, &string) и подчеркивает fun(s1[1], s1);

249
Стоит ли ставить MingW для : C/C++? [требует правки]

Стоит ли ставить MingW для : C/C++? [требует правки]

ЗдравствуйтеЯ думаю поставить компилятор MingW для SublimeText 3, вот ихний сайт: "http://mingw

226
Как передать двумерный vector в метод класса?

Как передать двумерный vector в метод класса?

Добрый день, вот есть у меня двумерный вектор vector< vector<int> > arr Как мне его параметром передать в метод?

293