我在函数中使用前向声明时遇到问题。通常在全局范围内,我们可以使用使用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使得它是一个新的标识符,即使它的名称和含义与全局标识符相同。

08-16 20:51