3

global.h他のファイルで使用する予定のいくつかの変数を宣言するヘッダーファイルがあります。

#ifndef GLOBAL_H_
#define GLOBAL_H_

#include <stdio.h>

typedef struct tag_KG_Data
{
   int nKGStationID;
   int nKGComPort;

 }GLOBAL_VAR;

 GLOBAL_VAR g_GlobalVar;

 BOOL b_newDataReady;
 BOOL b_startedSocketClient;



#endif

GLOBAL_VAR g_GlobalVar最初は、ファイルtest1.cppでのみ宣言しextern GLOBAL_VAR g_GlobalVar;、問題なく動作しました。次に、2BOOLを宣言し、で使用しましたtest2.cppが、error LNK2005: "struct tag_KG_Data g_GlobalVar" (?g_GlobalVar@@3Utag_KG_Data@@A) already defined in test1.objグローバル変数ごとに同様のエラーが発生します。問題は、で、またはのいずれも使用GLOBAL_VAR g_GlobalVarしないということです。test2.cppBOOLtest1.cpp

4

1 に答える 1

8

これは、ヘッダーでグローバルを定義しているのに対し、宣言するだけでよいためです。

グローバル定義の前に追加externし、単一のcppファイルに定義を作成します。

ヘッダー内:

// Declarations
extern GLOBAL_VAR g_GlobalVar;
extern BOOL b_newDataReady;
extern BOOL b_startedSocketClient;

cppファイルの場合:

// Definitions
GLOBAL_VAR g_GlobalVar;
BOOL b_newDataReady;
BOOL b_startedSocketClient;
于 2012-09-09T11:37:03.843 に答える