我在函數中使用前向聲明時遇到問題。通常在全局範圍內,我們可以使用使用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
。
我該如何解決這個問題?
嗯..移動它的功能以外? –
'struct ChIdRec'是一個局部結構,它如何在函數'F()'之外實例化? – mark
爲什麼你在本地再次聲明'extern ChIdRec Evn'? 'extern foo bar'應該只出現一次,即在實現'foo bar'的模塊(如果有的話)的頭文件中。 – alk