Arduino IDE не распознает, что .c файл является .cpp
Я создаю библиотеку для конкретной платы для Arduino IDE. Библиотека отлично работает, и теперь я делаю шаг назад, чтобы добавить OO. Библиотека представляет собой сочетание файлов .c и .cpp. Я знаю, что для добавления классов мне нужно использовать только .cpp.
Это файл LED.h.
https://gist.github.com/SaraJo/182220fda82cbe30255fe95f59d4a6b4
Вот файл LED.cpp.
https://gist.github.com/SaraJo/1b3d6967d7bc2ef2e70d79025b755eb9
Ошибка, которую я получаю:
In file included from /Users/sarachipps/Library/Arduino15/packages/Jewelbots/hardware/nRF51822/1.0.0/cores/JWB_nRF51822/Arduino.h:54:0,
from /Users/sarachipps/Library/Arduino15/packages/Jewelbots/hardware/nRF51822/1.0.0/cores/JWB_nRF51822/ble-nrf51822-master/source/main.c:49:
/Users/sarachipps/Library/Arduino15/packages/Jewelbots/hardware/nRF51822/1.0.0/cores/JWB_nRF51822/LED.h:12:1: error: unknown type name 'class'
class LED {
^
/Users/sarachipps/Library/Arduino15/packages/Jewelbots/hardware/nRF51822/1.0.0/cores/JWB_nRF51822/LED.h:12:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
class LED {
^
exit status 1
Error compiling for board JWB nRF51822(V1.0 32KB).
Я предполагаю, что Arduino видит файл .cpp как .c, есть ли флаг компилятора, который мне нужно установить? Спасибо.
Ответы
Ответ 1
Итак, проблема в том, что компилятор C для main.c
не понимает ключевое слово "class" в заголовочном файле С++ LED.h
. Можете ли вы изменить main.c
на main.cpp
и посмотреть, работает ли это?
(Вам также может потребоваться добавить
#ifdef __cplusplus
extern "C" {
#endif
вверху и
#ifdef __cplusplus
}
#endif
внизу файла main.h
(или, возможно, файл main.cpp
?), так что С++ не пытается калечить имена некоторых ваших функций, чтобы компоновщик мог их найти...
Ответ 2
Вы не можете включать объявления С++ в файлы заголовков в файлах C. Если вам нужно смешивать объявления C и С++ в том же заголовочном файле, оберните С++ в
#ifdef __cplusplus
class MyClass {
// ...
};
#endif