Перегрузка меньше чем оператор в c ++ получил ошибку

0

У меня есть программа c++ для перегрузки меньше, чем оператор, и ожидается имя типа error-. Я хочу перегрузить <оператор для изучения 12-го класса.

  bool operator <(abc x,abc y)
   {
     return(x.a<y.a);
   }

Полная программа:

#include<iostream.h>
#include<conio.h>
class abc
 {
  int a;
  public:
  abc()
  {
   a=0;
   }
  abc(int x)
  {
   a=x;
  }
  void show()
  {
   cout<<"\n"<<a;
  }

  bool operator <(abc x,abc y)
   {
     return(x.a<y.a);
   }


 };
void main()
 {
  clrscr();
  abc p(4),q(2);
  p.show();
  q.show();
  if(p<q)
   cout<<"\nP is Less than Q";
  getch();
 }
  • 1
    Можете показать ошибку? И, возможно, предоставить SSCCE ?
  • 1
    Пожалуйста, постарайтесь правильно отформатировать ваш код - также, пожалуйста, не используйте void main .
Показать ещё 1 комментарий
Теги:
operator-keyword
overloading

3 ответа

2

Проблема в том, что когда вы определяете operator< как функцию-член, он должен принимать только один аргумент, который является вторым операндом оператора. Первый операнд - это объект, обозначаемый *this:

bool operator<(const abc& y)
{
  return(this->a < y.a);
}

Обратите внимание, что main должен возвращать int.

  • 0
    но ошибки все равно остаются .....
1

Вы определили оператор как функцию-член. В этом случае левым операндом оператора является this

Правильное определение будет выглядеть так:

bool operator <( const abc &rhs ) const
{
     return ( a < rhs.a );
}

Хотя было бы лучше, если бы вы определили его как функцию, не являющуюся членом. Например

class abc
{
//...
   friend bool operator <( const abc &lhs, const abc &rhs );
//...
};

bool operator <<( const abc &lhs, const abc &rhs )
{
   return ( lhs.a < rhs.a );
} 

Учтите, что функция main должна иметь тип возврата int

  • 0
    да уж...!!! Спасибо брат...!! это сработало...
0

Оператор <функция должен принимать только один аргумент. попробуй это:

  bool operator <(abc& other)
   {
     return(a < other.a );
   }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню