Перейти к содержанию
    

Перегрузка операторов в iare

Для класса перегрузил оператор + всё ок затем добавил перегрузку привидения типа к char и он стал писать такую ошибку:

 

Error[Pe350]: more than one operator "+" matches these operands:

built-in operator "arithmetic + arithmetic"

function "i2c_p::operator+(unsigned short)"

operand types are: i2c_p __near + int

 

 

Может кто в курсе в чём проблема? :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видимо дело в конфликте явного и неявного приведений типа к char.

Попробуйте не делать явных приведений, а перегрузите оперетор для других нужных типов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати если убрать перегрузку плюса то он перестаёт ругаться и выдаёт сообщение о неправильном приведении типа

 

Сождаётся впечатление что запись

operator char();

он принимает за перегрузку плюса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати если убрать перегрузку плюса то он перестаёт ругаться и выдаёт сообщение о неправильном приведении типа

 

Сождаётся впечатление что запись

operator char();

он принимает за перегрузку плюса

Вы бы код привели лучше, мы бы сами посмотрели, чем гадать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот объявление класса:

 

class i2c_p

{

public:

unsigned short adr;

void operator = (unsigned short a);

i2c_p operator + (unsigned short a);

i2c operator [] (unsigned short i);

operator char();

i2c operator * ();

i2c_p(unsigned short a);

};

 

использую его так:

 

i2c_p p(10),q(20);

p=q; //так компилирует

p=q+1 //а так пишет ошибку

:huh:

Error[Pe350]: more than one operator "+" matches these operands:

built-in operator "arithmetic + arithmetic"

function "i2c_p::operator+(unsigned short)"

operand types are: i2c_p __near + int

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сождаётся впечатление что запись

operator char();

он принимает за перегрузку плюса

Компилер не знает какой из операторов + использовать: встроенный или перегруженный, так как у тя имеется оператор char(), которым объект типа i2c_p приводится к char, а char, в свою очередь имеет неявное пробразование в int, ну или там unsigned short. Сделай вместо перегруза char функцию: char toChar()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...