我正在为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,我是否需要设置编译器标志?谢谢你。
最佳答案
因此,问题在于main.c
的C编译器无法理解C++头文件LED.h
中的“class”关键字。您可以将main.c
更改为main.cpp
并查看是否可行吗?
(您可能还需要添加
#ifdef __cplusplus
extern "C" {
#endif
在顶部,和
#ifdef __cplusplus
}
#endif
位于
main.h
文件(或者可能是main.cpp
文件?)的底部,以便C++不会尝试处理某些函数的名称,以便链接程序可以找到它们…