juvf 17 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Есть проект для msp430f149 написанный на СИ. Пишу новый модуль (файл с функциями) для этого проекта. Ну очень нужен на с++. Для нового файла установил опцию Embedded C++. При компиляции получаю ошибки Error[Pe040]: expected an identifier C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 128 Error[Pe018]: expected a ")" C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 128 Error[Pa002]: the type attribute "__intrinsic" is not allowed on this declaration C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 128 Error[Pe040]: expected an identifier C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 130 Error[Pe018]: expected a ")" C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 130 Error[Pa002]: the type attribute "__intrinsic" is not allowed on this declaration C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 130 ... вот кусок кода из math.h #ifdef __cplusplus __INTRINSIC double abs(double); //строка 128 __INTRINSIC double pow(double, int); __INTRINSIC float abs(float); //строка 130 .... __INTRINSIC long double tanh(long double); #endif /* __cplusplus */ т.е. asb() несколько раз объявлена и на неё ругается. Как это побороть можно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба вот кусок кода из math.h #ifdef __cplusplus __INTRINSIC double abs(double); //строка 128 __INTRINSIC double pow(double, int); __INTRINSIC float abs(float); //строка 130 .... __INTRINSIC long double tanh(long double); #endif /* __cplusplus */ т.е. asb() несколько раз объявлена и на неё ругается. Как это побороть можно? Вы серьезно думаете, что ошибка в IAR'овских либах? :) Ошибка где-то в вашем коде. Покажите его (удалите все лишнее, оставьте только фрагмент, который приводит к ошибке)? Что касается нескольких функций с именем abs, то следует вспомнить о такой фиче С++, как перегрузка имен функций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akostin 0 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Используйте приведение типов при вызове функции abs(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Ну проблему решил, и почему она возникла в таком виде - примерно понял. А проблему решил строчкой в срр файле #include <math.h>. в cpp есть #include "main.h". а main - это уже сишный. в main.h есть #include <math.h> который, по видимому компилялся как сишный. а в си нет перегрузки функций. но с++ так и не прикрутил, есть еще проблема - но это уже другая тема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться