我在“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/