与其他很多'x'没有在这里命名类型错误不同,我不认为这个涉及循环依赖,但我仍然无法搞清楚。
typedef struct /* structure definitions */
{
float mat[4][4];
} matrix_unit;
matrix_unit I = {
{ 1., 0., 0., 0.,
0., 1., 0., 0.,
0., 0., 1., 0.,
0., 0., 0., 1 },
};
matrix_unit *stack[50]; /* (line 456) array of pointers to act as a stack */
matrix_unit stackbase = I;
stack[0] = &stackbase; // 'stack' does not name a type
由于堆栈已经被声明为指向matrix_unit结构的指针堆栈,这不应该是有效的吗?
当我用“gcc -c 3D.c”编译代码时,我从这些行中得到以下错误:
3D.c:457:1: error: initializer element is not constant
3D.c:458:1: warning: data definition has no type or storage class
3D.c:458:1: error: conflicting types for ‘stack’
3D.c:456:14: note: previous declaration of ‘stack’ was here
3D.c:458:1: error: invalid initializer
提前感谢您的帮助。
答案 0 :(得分:2)
编译器正在尝试将第458行解析为声明。它不是,这是一个声明。语句必须写在函数内。像这样:
void initialize()
{
stack[0] = &stackbase;
}