2014-02-02 4 views
-1

У меня есть программа C++ для перегрузки меньше, чем оператор, а ошибка - Предпочитаемое название типа. Я хочу перегрузить < оператор только для изучения 12-го класса.Ошибка при перегрузке с помощью оператора в C++

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] (http://sscce.org/)? –

+1

Пожалуйста, приложите усилия для правильного форматирования кода - также не используйте 'void main'. –

+1

'iostream.h'? В самом деле? За 16 лет с момента выхода первого стандарта C++ это никогда не было правильным. –

ответ

2

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

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

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

+0

но ошибка все еще остается ..... – arsha

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); 
} 

Примите во внимание, что функция должна иметь основной тип возвращаемого значения int

+0

да ... !!! Спасибо брат...!! это сработало... – arsha

0

Функция оператора < следует принимать только один аргумент. попробуйте следующее:

bool operator <(abc& other) 
    { 
    return(a < other.a); 
    } 
Смежные вопросы