2017-02-21 4 views
2

私のコードは私のコンパイラは不平を言っている。しかし、このInititalizeは、構造体の配列は

struct { 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
} car; 

struct car road[10]; //a road filled with cars 

のように見えます違う?私は例をオンラインで見て、これが構造体の配列を初期化する方法であることを示しています。それは明らかにされていない場合

、私は車の構造体の配列を作成しようとしている

+0

あなたはstruct' '前のtypedefが不足していますか? – dasblinkenlight

答えて

3

変更:インスタンスを1つだけ宣言し

struct { 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
} car; 

無名の構造のcar

struct car{ 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
}; 

新しいタイプを宣言するstruct carstructの名前は、キーワードstructの次にある必要があります。


また、行うことができます。

typedef struct { 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
} car; 

、その後、あなただけcar、ないstruct carとしてこのstructを参照してください。

structsとその構文の詳細については、this linkを参照してください。

+0

ありがとうございます!しかし、私はstructキーワードの前後に名前をつけて構造体を宣言することの違いを混同しています。あなたはいつ/両方の違いについてのヒントを知っていますか? – penu

+0

@penu * 'struct'キーワードの前にはどういう意味ですか? – Marievi

+0

@penuあなたが書いたのは、型が無名の構造体である 'car'という変数を定義しています。 'struct car {...}'バージョンは 'struct car'と呼ばれる型を定義します。二つを組み合わせることができます: 'struct car {...} my_car;'は 'struct car'と' my_car'の両方の型を定義します。 – melpomene

1

この:

struct { 
    ... 
} car; 

carと呼ばれる匿名の構造の単一のインスタンスを宣言します。 struct {... }の部分は、新しいタイプが使用されることを除いて、他のタイプの名前と同様に表示されます。構造体に名前を指定しないため、carインスタンス以上を作成することはできません。

これは無意味なように思えるかもしれませんが、物事をまとめるときには本当に便利です。

struct car { 
... 
}; 

struct carと呼ばれる新しい構造体型を宣言している:あなたはこのだった意味は何

。この名前を使用して宣言を参照することができます。あなたがやったように、後のインスタンスの束を作成します。

struct car road[10]; 
+0

'struct car {...} road [10];'(おそらく良い考えではありません)という2つの宣言を組み合わせることさえできます。 – melpomene

+0

ありがとう、この回答はまた非常に簡潔です – penu

+0

@melpomeneなぜいいアイデアではありませんか? – penu

1

オプション1(のtypedefなし):

struct car { 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
}; 

struct car road[10]; 

オプション2(無名の構造体とtypedefを持つ):

typedef struct { 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
} car_t; 

car_t road[10]; 

オプション3 (名前付き構造体を持つtypedefで):

typedef struct car { 
    int valid; 
    int pid; 
    int heading; 
    int speed; 
} car_t; 

car_t road[10]; 
//or 
struct car road[10]; 

Linux Coding Style状態:

それは構造体のtypedefを使用する間違いだ...