我在函数中使用前向声明时遇到问题。通常在全局范围内,我们可以使用使用extern
关键字声明的 undefined variable 的地址。看一个简单的例子。
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
。我该如何解决这个问题?
最佳答案
不要在函数内部重复定义类型。尤其是typedef
使得它是一个新的标识符,即使它的名称和含义与全局标识符相同。