我在函数中使用前向声明时遇到问题。通常在全局范围内,我们可以使用使用 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
使得这是一个新标识符,即使它与全局标识符具有相同的名称和含义。
关于c++ - 函数中的前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822764/