Arduino IDE 无法识别 .c 文件是 .cpp

Arduino IDE not recognizing that .c file is .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,是否需要设置编译器标志?谢谢你。

所以,问题是 main.c 的 C 编译器不理解 C++ 头文件 LED.h 中的 "class" 关键字。你能把 main.c 改成 main.cpp 看看行不行?

(您可能还需要添加

#ifdef __cplusplus
extern "C" {
#endif

在顶部,

#ifdef __cplusplus
}
#endif

main.h 文件(或者可能是 main.cpp 文件?)的底部,这样 C++ 就不会试图破坏某些函数的名称,这样链接器就可以找到他们…

您不能在 C 文件的头文件中包含 C++ 声明。如果您需要在同一头文件中混合使用 C 和 C++ 声明,请将 C++ 声明包装在

#ifdef __cplusplus
class MyClass {
  // ...
};
#endif