c++ - 函数中的前向声明

标签 c++ c

我在函数中使用前向声明时遇到问题。通常在全局范围内,我们可以使用使用 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/

相关文章:

c - 函数参数指针数组 (C)

c++ - 使用 pthreads 时的后台线程(不错,优先级)

c++ - 为什么 Glibmm/Gtkmm 不包括 Glib::RefPtr 的一元取消引用运算符 *?

c++ - Vazirani 等人的动态编程中的字符串算法括号。阿尔

c++ - OpenGL + SDL 有时会脱离坐标

c++ - 组合框中的自动建议

c++ - 如何让编译器在没有 C++11 的情况下手动检查数据类型

c++ - 可变参数模板参数的传递位置

c - 摆脱正则表达式编译器警告而不使用 "#include <regex.h>"

c - 使用不支持 mmap 的文件系统测试我的软件