構造体を複数のファイルで利用できません
Posted: 2014年2月20日(木) 21:00
Microsoft Visual Studio Express 2013 を使用しています。
ヘッダーファイルで使った構造体を複数のcppファイルで使用しようと思い、次のように書きました。
--Struct.h--
#pragma once
struct MyStruct{
int a;
}S;
extern struct MyStruct S;
----Source1.cpp---
#include "Dxlib.h"
#include "Struct.h"
S.a = 1;
----Source2.cpp---
#include "Dxlib.h"
#include "Struct.h"
S.a = 2;
ところが、
error LNK2005: "struct MyStruct S" (○○…)は Source1.cpp既にSource2で定義されています。
error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。C:\DxLib\Debug\GameProg_2012.exe GameProg_2012
というエラーが出てうまくいきません。調べてみたところ、ヘッダーファイルに二重インクルード防止のコードを書くことで回避できる。という内容があったので実行してみたのですがうまくいきませんでした。
Source1,Source2どちらかの #include "Struct.h" を削除するとエラーが解消されます。
別の手段として、構造体の内容をcppファイルに書き写して別のcppファイルでextern宣言してみたのですが、これもうまくいきませんでした。
構造体のextern宣言は次のようにやりました。
--Struct.cpp--
struct MyStruct{
int a;
}S;
--Source1.cpp--
extern struct S;
なるべくメインファイルを分割してゲームを作りたいのですが、うまくいきません。
例えば、Struct.h (またはStruct.cpp) に書いた構造体の内容をSource1.cpp、 Source2.cpp、Source3.cpp など複数のソースファイルで使用できるようにするにはどうしたらよいのでしょうか。
ヘッダーファイルで使った構造体を複数のcppファイルで使用しようと思い、次のように書きました。
--Struct.h--
#pragma once
struct MyStruct{
int a;
}S;
extern struct MyStruct S;
----Source1.cpp---
#include "Dxlib.h"
#include "Struct.h"
S.a = 1;
----Source2.cpp---
#include "Dxlib.h"
#include "Struct.h"
S.a = 2;
ところが、
error LNK2005: "struct MyStruct S" (○○…)は Source1.cpp既にSource2で定義されています。
error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。C:\DxLib\Debug\GameProg_2012.exe GameProg_2012
というエラーが出てうまくいきません。調べてみたところ、ヘッダーファイルに二重インクルード防止のコードを書くことで回避できる。という内容があったので実行してみたのですがうまくいきませんでした。
Source1,Source2どちらかの #include "Struct.h" を削除するとエラーが解消されます。
別の手段として、構造体の内容をcppファイルに書き写して別のcppファイルでextern宣言してみたのですが、これもうまくいきませんでした。
構造体のextern宣言は次のようにやりました。
--Struct.cpp--
struct MyStruct{
int a;
}S;
--Source1.cpp--
extern struct S;
なるべくメインファイルを分割してゲームを作りたいのですが、うまくいきません。
例えば、Struct.h (またはStruct.cpp) に書いた構造体の内容をSource1.cpp、 Source2.cpp、Source3.cpp など複数のソースファイルで使用できるようにするにはどうしたらよいのでしょうか。