реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Перегрузка операторов в iare
Пришелец
сообщение Aug 11 2005, 13:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Для класса перегрузил оператор + всё ок затем добавил перегрузку привидения типа к 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.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Aug 11 2005, 13:34
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Видимо дело в конфликте явного и неявного приведений типа к char.
Попробуйте не делать явных приведений, а перегрузите оперетор для других нужных типов.
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Aug 11 2005, 13:39
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Нет явного приведения не делается blink.gif
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Aug 11 2005, 13:43
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



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

Сождаётся впечатление что запись
operator char();
он принимает за перегрузку плюса
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 12 2005, 04:03
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Пришелец @ Aug 11 2005, 19:43)
Кстати если убрать перегрузку плюса то он перестаёт ругаться и выдаёт сообщение о неправильном приведении типа

Сождаётся впечатление что запись
operator char();
он принимает за перегрузку плюса
*

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Aug 12 2005, 06:06
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



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

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.gif
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
Go to the top of the page
 
+Quote Post
freux
сообщение Aug 12 2005, 11:50
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 7-02-05
Пользователь №: 2 473



Цитата(Пришелец @ Aug 11 2005, 16:39)
Сождаётся впечатление что запись
operator char();
он принимает за перегрузку плюса
*

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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th July 2025 - 22:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.03553 секунд с 7
ELECTRONIX ©2004-2016