2014-01-12 946 views
6
#include <stdio.h>  
typedef struct 
    {  
     int num ; 
    } NUMBER ; 

    int main(void) 
    { 
     struct NUMBER array[99999]; 
     return 0; 
    } 

を持っている私は、コンパイルエラーを取得しています:Cコンパイルエラー:配列型が不完全要素型

error: array type has incomplete element type 

私はこの問題は、私が間違って構造体の配列を宣言してるということであると信じています。それは私がそれを見上げたときにそれを宣言する方法のようです。すでにtypedefあなたの構造体を編ため

答えて

13
struct NUMBER array[99999]; 

NUMBER array[99999]; 

でなければなりません。


EDIT:OPは私が彼を提案することは動作していないことを主張しているように、私は、このテスト・コードをコンパイルし、それが正常に動作している:

#include <stdio.h> 
typedef struct 
{ 
    int num ; 
} NUMBER ; 

int main(void) 
{ 
    NUMBER array[99999]; 
    array[0].num = 10; 
    printf("%d", array[0].num); 
    return 0; 
} 

running codeを参照してください。

+2

または 'struct NUMBER {int num;};' typedefなし – SHR

+1

@SHRはい。そうです。 – haccks

+0

NUMBER配列[99999];私にもっと誤りを与えます。それらの1つが述べています:NUMBERは宣言されていません。 –

3

あなたは持っているあなたは今、2つの等価タイプしている

struct anonymous_struct1 
    {  
     int num ; 
    }; 
typedef struct anonymous_struct1 NUMBER ; 

の省略形です

typedef struct 
    {  
     int num ; 
    } NUMBER ; 

struct anonymous_struct1 
NUMBER 
あなたはそれらの両方を使用することができます

が、anonymous_struct1がでているが、 struct名前空間。常に先頭にを付ける必要がありますを使用してください。 (これは、CとC++の間に1つの大きな違いである。)

だからあなただけ

NUMBER array[99999]; 

またはあなたが

typedef struct number 
    {  
     int num ; 
    } NUMBER ; 

または単に

struct number 
    {  
     int num ; 
    }; 

を定義し、実行する操作を行うのいずれか

struct number array[99999]; 
+0

構造体番号 { int num; }; –

+1

私はあなたの最後の方法を試しましたが、それでもまだ言います:エラー:配列型に不完全な要素型があります –

関連する問題