質問: C + +の警備員が動作していないように見える mbed C ++コンパイラから誤ったインクルードガードを示すエラーメッセージが表示されます。 main.cppには、以下のようにヘッダファイルが含まれています: ``` #include "mbed.h" #include "sample.h" ``` これは私のsample.hです: ``` #include "mbed.h" #ifndef STUFF_H #define STUFF_H /* LEDs */ DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); /* Subroutines */ void sweepLEDs(); void pulseLEDs(int numPulses); void clearLEDs(); #endif ``` sample.cppでは、次のようにsample.hをインクルードします。 ``` #include "sample.h" ``` main.cppとsample.cppの両方で、変数 `led1、led2、led3、led4` を宣言せずに参照しています。しかし、コンパイラはこれらの苦情を出力しています: > > > "シンボルled1が複数定義されています(sample.cpp.cpp.LPC1768.oとmain.cpp.cpp.LPC1768.o)。" > ... > "シンボルled4が(sample.cpp.cpp.LPC1768.oとmain.cpp.cpp.LPC1768.oによって)定義されています。" > > > 私のインクルードガードは正しく書かれていませんか?それとも別の問題がありますか? (参考として、 [mbed.hソースへのリンク](https://mbed.org/projects/libraries/svn/mbed/trunk/mbed.h?rev=28 "mbed.hファイル"))
回答: 宣言は、次のように「 extern 」としてマークする必要があります。 ``` extern DigitalOut led1; ``` 次に、ヘッダにある式を使用して、sample.cppでそれらを定義します(つまり、そのためのストレージを割り当てます)。