2012-03-27 8 views
0

他の多くの 'x'とは異なり、ここにタイプエラーの名前は付けませんが、これは循環依存関係は含まれていませんが、それを出す。スタックは、すでに構造体をmatrix_unitへのポインタのスタックとして宣言されているのでもう1つの "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 

、これは有効ではないでしょうか?

私は「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

gccでうまくコンパイルします。4.6.2 – grifos

+0

Hmm ..まあ、私はC++ファイルからインクルードしています。それは何に影響を与えるべきか?私はg ++でそれをコンパイルしています – Richard

+0

g ++ 4.6.2でもコンパイルできます。したがって、これはこのサブセットのコンパイラの問題ではありません。しかし、私はあなたの投稿に書いたものだけをテストすることができました。 – grifos

答えて

2

コンパイラは、行458を宣言として解析しようとしています。それは声明ではありません。文は関数内に記述する必要があります。このように:

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

それは動作します!みんな助けてくれてありがとう。 – Richard

関連する問題