2016-11-14 6 views
15

Arduino IDE用の特定のボードのライブラリを作成しています。ライブラリは素晴らしい作品ですが、今ではOOを追加するために一歩前進しています。ライブラリには.cと.cppファイルが混在しています。私はクラスを追加するために、私は.cppだけを使う必要があることを知っています。Arduino IDEは.cファイルが.cppであることを認識しません

これはLED.hファイルです。ここで

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

はLED.cppファイルです。

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

私が手にエラーがある:私はArduinoのは.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コンパイラは、C++ヘッダファイルLED.hの "class"キーワードを理解できません。 main.cmain.cppに変更して動作することがありますか?

(あなたはまた、

上部に
#ifdef __cplusplus 
extern "C" { 
#endif 

、およびmain.hファイル(または多分main.cppファイルの一番下に

#ifdef __cplusplus 
} 
#endif 

を追加する必要があるかもしれません?)C++」はdoesnのようにあなたの関数の名前をmangleして、リンカがそれらを見つけることができるようにします。

+0

これはうまくいきました。 –

+0

宣言(プロトタイプとも呼ばれます)と定義の両方で 'extern" C "'を実行する必要があります(必要なら 'main.cpp'が他の誰かが呼び出すものを宣言しています)main()関数自体は必要ではないはずですが、C++コンパイラはそれを暗黙的に行うことを知っています。 – uliwitness

2

CファイルのヘッダファイルにはC++宣言を含めることはできません。同じヘッダファイルにCとC++の宣言を混ぜて、C++のものをラップしてください。

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

しかし、main.cからLEDクラスにアクセスすることはできません。 – bwinton

+0

通常、 (継承またはメソッドなしの)構造体と 'extern" C "関数から呼び出せるC++クラスの周りにCのみのラッパーを記述しています – uliwitness

+0

なぜこれが問題であるのか不明な人は、主に_compilation units_についてです。より詳細なイントロについては(C++の詳細については触れていませんが)http://masters-of-the-void.com/book10.htmを参照してください。 – uliwitness

関連する問題