関数での前方宣言の使用に問題があります。extern
通常、グローバルスコープでは、キーワードを使用して宣言された未定義変数のアドレスを使用できます。簡単な例を見てください。
typedef struct Id {
int a;
} xIdRec;
typedef xIdRec* IdN;
typedef struct ChId{
int a;
IdN* b;
} ChIdRec;
extern ChIdRec Evn;
IdN Arr[] = {(IdN)&Evn};
ChIdRec Evn = {8, Arr};
しかし、関数定義中にこのコードをどのように使用できますか? このように使ってみることができます。
void F (){
typedef struct Id {
int a;
} xIdRec;
typedef xIdRec* IdN;
typedef struct ChId{
int a;
IdN* b;
} ChIdRec;
extern ChIdRec Evn;
IdN Arr[] = {(IdN)&Evn};
ChIdRec Evn = {8, Arr};
}
しかし、ここでエラーが発生しました — error C2086: 'ChIdRec Evn' : redefinition
. の最初の宣言を削除できますEvn
が、別のエラーが発生します — error C2065: 'Evn' : undeclared identifier
.
このビットの問題を解決するにはどうすればよいですか?