我在函数中使用前向声明时遇到问题。通常在全局范围内,我们可以使用使用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
。
我该如何解决这个位问题?