2016-11-14 4 views
15

Arduino IDE 용 특정 보드 용 라이브러리를 만들고 있습니다. 라이브러리는 훌륭하게 작동하며 이제는 OO를 추가하기 위해 단계를 되돌리고 있습니다. 라이브러리에는 .c 및 .cpp 파일이 혼합되어 있습니다. 클래스를 추가하려면 .cpp 만 사용해야합니다.Arduino IDE는 .c 파일을 인식하지 못합니다.

이것은 LED.h 파일입니다. 여기

https://gist.github.com/SaraJo/182220fda82cbe30255fe95f59d4a6b4

는 LED.cpp 파일입니다.

https://gist.github.com/SaraJo/1b3d6967d7bc2ef2e70d79025b755eb9

내가 오류는 다음과 같습니다 나는 아두 이노는이 .c로 .cpp 파일을보고있다 같은데요

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). 

, 내가 설정해야 컴파일러 플래그가? 고맙습니다.

답변

7

그래서 문제는 main.c의 C 컴파일러가 C32 헤더 파일 LED.h의 "class"키워드를 이해하지 못한다는 것입니다. main.cmain.cpp으로 변경하고 작동하는지 확인해주세요.

는 (당신은 또한 C++은 '아무튼 그래서 어쩌면하여 main.h 파일의 맨 아래 (또는 main.cpp 파일?)에

#ifdef __cplusplus 
extern "C" { 
#endif 
상단에

#ifdef __cplusplus 
} 
#endif 

을 추가해야 할 수 있습니다 링커가 찾을 수 있도록 일부 함수의 이름을 맹 글링하려고 시도하십시오.

+0

이 작업을 해 주셔서 감사합니다. –

+0

선언문 (프로토 타입이라고도 함)과 정의 (필요한 경우, 즉'main.cpp'가 다른 사람이 호출하는 것을 선언하는 경우)에 'extern "C"'를 수행해야합니다.). main() 함수 자체는 필요하지 않습니다. C++ 컴파일러는 암시 적으로이를 수행 할 것을 알고 있습니다. – uliwitness

2

C 파일의 헤더 파일에 C++ 선언을 포함 할 수 없습니다. 같은 헤더 파일에 C와 C++ 선언을 섞고 C++ 코드를 랩합니다.

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

그러나 main.c에서 LED 클래스에 액세스 할 수 없게됩니다 ... – bwinton

+0

보통이 경우 사람들은 어떻게합니까? CIe에서 (상속 또는 메서드없이) 구조체와'extern "C"함수를 호출 할 수있는 C++ 클래스 주위에 C 전용 래퍼를 작성합니다 – uliwitness

+0

왜 이것이 문제인지 궁금한 분은 대부분 _compilation units_에 관한 것입니다. 더 자세한 소개 (C++의 세부 사항은 다루지 않음)는 http://masters-of-the-void.com/book10.htm을 참조하십시오. – uliwitness