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

 
 
> Определение оператора класса, странная ошибка
MK2
сообщение Sep 24 2013, 17:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



работаю в IAR 6.40

есть класс, в котором определен оператор +=
Код
class CL_StringLib
{
///.....
CL_StringLib & operator += (const uint8_t * addpoint )
{
      //....
      return *this;
}
}

далее в коде встречается использование этого оператора:
Код
....
Trip +=
           ( (SPEED_UNITS)" Km":" M");
Trip += "mm";
....

и в первой строчке выдает ошибку
Код
Error[Pe349]: no operator "+=" matches these operands C:\.....
            operand types are: string_lib::CL_StringLib += char const *

во второй
Код
Error[Pe349]: no operator "+=" matches these operands C:\....
            operand types are: string_lib::CL_StringLib += char const [3]

непонятно как так он не находит этого оператора и почему он пытается копировать массив в ф-цию оператора?!
можно конечно отделаться сделав так:
Код
....
Trip +=  (const uint8_t *)
           ( (SPEED_UNITS)" Km":" M");
....


но хочется что бы было кошерно.
будут какие-нибудь соображения как сделать лучше?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Sep 24 2013, 21:17
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



И все-таки проверьте - определите параметры вашего оператора так:
Код
void CL_StringLib::Add(const char *);

т.е. в буквальном соответствии со строковой константой. И посмотрите, пропадет ли ошибка в строке
Код
Trip += "mm";


Дело в том, что в хидере stdint.h тип uint8_t может быть определен не как unsigned char, а каким-нибудь вычурным способом, вроде:
Код
  typedef __UINT8_T_TYPE__ uint8_t;

и тогда компилятор не сможет догадаться, что char и uint8_t синонимичны. Для С++ вообще характерно считать разными все определения, которые по-разному пишутся. sm.gif
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 24 2013, 23:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 25 2013, 00:17) *
Для С++ вообще характерно считать разными все определения, которые по-разному пишутся. sm.gif

Средство typedef вводит синоним существующего типа, а не новый тип. Вот хотя бы в Бьерн Страуструп. Язык программирования С++. Второе дополненное издание. Смотрите раздел 2.3.9. Хотя это не поможет ТС.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MK2   Определение оператора класса   Sep 24 2013, 17:12
- - Xenia   Цитата(MK2 @ Sep 24 2013, 21:12) Код.... ...   Sep 24 2013, 18:39
|- - MK2   Цитата(Xenia @ Sep 24 2013, 21:39) Стринг...   Sep 24 2013, 20:56
- - A. Fig Lee   Speed_units знак вопроса включает?   Sep 25 2013, 03:08
- - MK2   Цитата(Xenia @ Sep 25 2013, 00:17) И все-...   Sep 25 2013, 09:51
|- - Сергей Борщ   QUOTE (MK2 @ Sep 25 2013, 11:51) Далее вы...   Sep 25 2013, 12:04
|- - MK2   Цитата(Сергей Борщ @ Sep 25 2013, 15:04) ...   Sep 25 2013, 13:01
- - MALLOY2   Думаю дело тут в promoution. Где то в стандарте ра...   Sep 25 2013, 14:02
|- - MK2   Цитата(MALLOY2 @ Sep 25 2013, 17:02) Дума...   Sep 25 2013, 15:29
|- - Сергей Борщ   QUOTE (MK2 @ Sep 25 2013, 17:29) не выдае...   Sep 25 2013, 16:16
|- - MK2   Цитата(Сергей Борщ @ Sep 25 2013, 19:16) ...   Sep 25 2013, 19:36
|- - Сергей Борщ   QUOTE (MK2 @ Sep 25 2013, 21:36) Наконец ...   Sep 26 2013, 10:11
|- - MK2   Цитата(Сергей Борщ @ Sep 26 2013, 13:11) ...   Sep 26 2013, 15:44
|- - Сергей Борщ   QUOTE (MK2 @ Sep 26 2013, 17:44) на резул...   Sep 27 2013, 06:25
- - DASM   Ура, ошибка появилась ! я могу быть спокоен, д...   Sep 26 2013, 03:51


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

 


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


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