我在" 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 ++编译器
答案 0 :(得分:4)
为什么呢?因为当你单独进行分配时,你基本上是为每个赋值执行指令,在C中它必须在函数中。
然而,您可以进行静态初始化(只要值是固定的)。编译器在编译时完成静态初始化,因此不会执行任何指令来设置struct的值。
double verts[20][3];
obj objmesh = {
"c://temp//wings.obj",
20,
verts, /* declared above, not dynamically allocated */
0
};
如果你必须动态分配'verts',那么这对你不起作用。
答案 1 :(得分:3)
您需要在函数中进行分配,例如:
obj objmesh;
...
int main(int argc, char **argv)
{
... possibly other stuff here...
objmesh.filename="c://temp//wings.obj";
objmesh.nverts = 20;
objmesh.verts = (double (*)[3]) malloc( objmesh.nverts * sizeof(double[3]) );
objmesh.curvert = 0;
... More code here ...
}
顺便说一下:
double (*)[3])
请求typedef ...