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
我正在为 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