as400にILE Cプロジェットがあり、グローバル変数externを置くと、グローバル変数または未定義参照の複数の再定義のエラーが発生します。as400 ILE Cグローバル変数複数の再定義
主:ここ
は、その最も単純な形態でコードである
#include "Header1"
int main(int argc, char** argv){
int x = Foo();
return 0;
}
ヘッダ1
#ifndef HEADER1
#define HEADER1
struct MyStruct{
int x;
};
struct MyStruct g_myStruct; /* My global struct variable. */
int Foo(void);
#endif
ヘッダ1の実装
#include "Header1"
#include "Header2"
int Foo(void){
g_myStruct.x = 432;
return Bar();
}
ヘッダ2
#ifndef HEADER2
#define HEADER2
int Bar(void);
#endif
ヘッダ2の実装
#include "Header2"
#include "Header1"
int Bar(void){
return g_myStruct.x;
}
各ファイルは罰金コンパイルします。私は次のエラーを取得、それらをリンクしようとする場合にのみ:私のグローバル構造体宣言の前にはexternキーワードで
Multiple strong definitions . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB 1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
を、私はこのエラーを取得する:
Unresolved references . . . . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB I1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
ヘッダーが '.h 'で終わらないのはなぜですか? –
ヘッダー1の実装ではセミコロンも忘れています: 'g_myStruct.x = 432'ですが、これを修正してコンパイルする必要があります。エラーを表示できますか? –
@AlterMann as400 QSYSファイルシステムに.hはありません。 –