c++ - 全局结构分配给出名称类型错误

标签 c++ compiler-construction

我在“parser.h”中有一个这样的结构

struct obj{
        char *filename;
        unsigned long nverts;
        unsigned long curvert;
        double (*verts)[3]; 
        unsigned int *faces[3]; 
};

typedef obj obj;

在 parser.cpp 中

我要声明

  obj objmesh;

    objmesh.filename="c://temp//wings.obj";
    objmesh.nverts = 20;
    objmesh.verts = (double (*)[3]) malloc( objmesh.nverts *  sizeof(double[3]) );
    objmesh.curvert = 0;

当我在 parser.cpp 的顶部执行这些分配时,出现“'objmesh' 未命名类型”错误。

但是当我将所有这些赋值放在 parser.cpp 中的一个函数中时(而 obj objmesh; 具有全局范围),我没有得到任何错误并且可以正常编译。

谁能想出出现这种情况的原因?我正在使用 Mingw Gnu 4.6 C++ 编译器

最佳答案

为什么?因为当您单独进行赋值时,您实际上是在为每个赋值执行指令,而在 C 语言中,这些指令必须在函数中。

但是您可以进行静态初始化(只要值是固定的)。静态初始化由编译器在编译时完成,因此不会执行任何指令来设置结构的值。

double verts[20][3];

obj objmesh = {
    "c://temp//wings.obj",
    20,
    verts, /* declared above, not dynamically allocated */
    0
    };

如果你必须动态分配'verts',那么这对你不起作用。

关于c++ - 全局结构分配给出名称类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793275/

相关文章:

c++ - 我如何围绕概念和不完整类型的限制进行设计?

使用 Sethi-Ullman 算法的表达式代码生成器

.net - IronScheme 是解释还是编译?它是否受益于 .NET Framework 优化?

assembly - 使用较小的寄存器有什么好处,例如al 与 eax/rax

c++ - 如果 RTC 失败,则在计时器上运行 Arduino 开发板

c++ - 通过在 C++ 中使用连接调用它来编辑字符串

从文本文件读取时 C++ 程序崩溃?

java引用数组中的对象

objective-c - Objective-C : Inline function - symbol not found

compiler-construction - 构建有效的外部 DSL