多重インクルードガード付きのヘッダーファイルを作成するのがよさそうです。バグのないプログラムはない。プログラムは思ったとおりには動かない。今回、a.cppとb.cppの両ファイルでグローバルな構造体変数を使えないかと思っています。書くとstructの二重定義のエラーになると思います。分割コンパイルの時、双方のファイルで同じ構造体をを使いたい場合は、どうすれば良いでしょうか?そのような場合,通常はヘッダファイルを使います。構造体の定義なので,インクルードガードが必要。2年前boxさま、Yuoさまありがとうございました。無事にコンパイルできました。うまく理解できません。一度だけ展開すると言うことは、a.cppに構造体の宣言が展開され、b.cppには何も展開されないように思ってしまいます。実際にはどうなのか、展開後のソースは見れないので、ここが上手く理解できますん。やった場合は、b.cpp側に構造体宣言が展開され、a.cppには何も展開されずエラーになりそうな気がします。試してみたら、実際にはエラーにならないんですね。ここの部分が、理解できません。2年前#defineによって定義されたシンボルは,コンパイルするソースファイルひとつの単位でのみ有効です。コンパイラの引数に複数のソースファイルを書いても,基本的にコンパイラは個々にコンパイルを行います。このため,#defineの定義は同時にコンパイラに渡された他のソースファイルの影響を受けません。インクルードガードは,1つのソースファイルから,同一のファイルが(直接・間接問わず)複数回インクルードされた場合にエラーにならないようにする物です。"setdata.h"ですが,こういうことはまず起こりません。実際にあるのはa.cppはb.hとc.hをインクルードc.hはb.hをインクルードというような場合でしょうか。この場合,a.cppという1つのソースファイルからb.hが2回インクルードされることになります。このような場合にエラーにならないように,インクルードガードを行います。2年前Yuoさま丁寧に対応して頂いてありがとうございました。書くとstructの二重定義のエラーになると思います。これが間違いだったんですね。この思い込みがあったのでなかなか理解できませんでした。ありがとうございました。ミクプラは自由にリンクできます。