Перегрузить оператор, берущий указатели в параметре - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь перегрузить оператор '>', принимая указатель на параметр, однако я получаю сообщение об ошибке, в котором говорится, что "operator> должен иметь хотя бы один параметр типа class".Я не получаю эту ошибку, если не использую указатель.

Примечание: S1 - это структура typedef, а также elem.

bool operator>(S1 const *V1, S1 const *V2){
    if (V1->elem->code > V2->elem->code)
        return true;
    return false;
}

Я использую оператор в случаевот так, например:

S1 * funct(S1 *var1, S1 *var2){
    if (var1 > var2)
        return var1;
    return var2;
}

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

Это не работает, потому что operator< уже определено для указателей. Невозможно перегрузить операторы для встроенных типов, потому что все операторы, которые имеют смысл для встроенных типов, уже определены.

1 голос
/ 12 марта 2012

По моему мнению, когда вы хотите определить новый оператор, который имеет более одного параметра. Есть две вещи, которые вы должны сделать.

  1. Оператор перегрузки должен быть определен вне класса.
  2. Оператор перегрузки должен быть объявлен дружественными функциями или классом класса.

Это мой опыт.

1 голос
/ 12 октября 2011

Компилятор захочет превратить ваш пример в сравнение двух значений указателя. Наличие одного параметра в качестве типа класса скажет ему, что ему нужно знать для устранения перегрузки.

bool operator>(const S1& V1, const S1& V2){
    if (V1.elem->code > V2.elem->code)
        return true;
    return false;
}

S1 * funct(S1 *var1, S1 *var2){
    if (*var1 > *var2)
        return var1;
    return var2;
}

Кроме того, и я немного расстроен этим, но я думаю, что вы должны объявить оператора другом S1 или сделать его членом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...