另一个“x”没有命名类型错误

时间:2012-03-27 02:16:48

标签: c

与其他很多'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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

编译器正在尝试将第458行解析为声明。它不是,这是一个声明。语句必须写在函数内。像这样:

void initialize() 
{
    stack[0] = &stackbase;
}