2015-04-10 5 views
2
struct player 
{ 
    string name; 
    int a; 
    int v; 
    int s; 
    bool operator< (const player lhs, const player rhs) 
    { 
     if ((lhs.a < rhs.a) 
      || ((lhs.a == rhs.a) && (lhs.v < rhs.v)) 
      || ((lhs.a == rhs.a) && (lhs.v == rhs.v) && (lhs.s > rhs.s)) 
      || ((lhs.a == rhs.a) && (lhs.v == rhs.v) && (lhs.s == rhs.s) && (lhs.name < rhs.name)) 
      ) 
      return true; 
     else 
      return false; 
    } 
}; 

Я имею эту структуру, и я хочу, чтобы оператор перегрузки оператора <, но я получаю ошибку «слишком много параметров для этой функции оператора». может ли кто-нибудь помочь мне в этом?C++ оператор <перегружать структура

ответ

2

Если определить оператор внутри вашей структуры вы могли бы сделать

bool operator<(const player& rhs) const 
{ 
    // do your comparison 
} 

Вы бы сравнить rhs.a к this->a (и каждый из других переменных)

+0

Dang, вы быстро! +1 –

+0

это сработало .. спасибо много! –

1

Да, вы должны иметь только один параметр: rhs параметр. Поскольку вы определяете operator< как функцию члена (метод aka), вы получаете левый операнд бесплатно через this.

Таким образом, вы должны написать это:

bool operator<(const player& rhs) const 
{ 
    //Your code using this-> to access the info for the left operand 
} 

Если вместо этого определен оператор как автономный функции, то вам пришлось бы включать в себя параметры для обоих операндов.

+0

Это сработало, спасибо большое –

+0

@SaeedSryheni Upvote, пожалуйста? – Sildoreth

+0

Я уже пробовал, он сказал, что Upvote требует 15 репутации, у меня только 11, я обещаю, что буду upvote, как только получится 15 репутации @Sildoreth –

Смежные вопросы