2017-02-21 3 views
2

Mein Code sieht wie folgt ausInititalize ein Array von Strukturen

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

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

jedoch mein Compiler beschwert sich:

"unvollständige Struktur/Union/enum Auto: Straße"

Was soll ich tun falsch? Ich habe mir Online-Beispiele angesehen und sie zeigen, dass man damit Arrays von Strukturen initialisiert.

Wenn es nicht offensichtlich ist, ich versuche, eine Reihe von Auto structs zu machen

+0

Vermissen Sie ein typedef vor 'struct'? – dasblinkenlight

Antwort

3

Wechsel:

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

die nur eine Instanz erklärt einer unbenannte Struktur, mit dem Namen car, bis:

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

, die einen neuen Typ struct car deklariert. Der Name struct muss neben dem Schlüsselwort struct sein.


Sie können auch tun:

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

und dann nur Sie auf diese struct als car beziehen, nicht struct car.

Weitere Informationen zu structs und deren Syntax finden Sie unter this link.

+0

Danke das funktioniert! Aber .. Ich bin verwirrt zwischen den Unterschieden der Deklaration einer Struktur mit dem Namen vor und nach dem Schlüsselwort struct. Kennen Sie Tipps zu den Unterschieden zwischen beiden? – penu

+0

@penu Was meinst du * vor * 'struct' Schlüsselwort? – Marievi

+0

@penu Was Sie geschrieben haben, definiert eine Variable namens 'car', deren Typ eine unbenannte Struktur ist. Die 'struct car {...}' Version definiert einen Typ namens 'struct car'. Sie können die beiden kombinieren: 'struct car {...} my_car;' definiert sowohl einen Typ 'struct car' als auch eine Variable' my_car'. – melpomene

1

Dieses:

struct { 
    ... 
} car; 

eine einzelne Instanz einer anonymen Struktur erklärt, genannt car. Sie können den struct {... }-Teil analog zu jedem anderen Typnamen anzeigen, außer dass ein neuer Typ verwendet wird. Da Sie der Struktur keinen Namen geben, können Sie nicht mehr als die car Instanz erstellen.

Dies mag wie eine sinnlose Sache zu tun scheinen, aber es kann wirklich nützlich sein, wenn Sie Dinge zusammen gruppieren möchten.

Was Sie gemeint war:

struct car { 
... 
}; 

, die struct car genannt einen neuen Strukturtyp deklariert. Sie können diesen Namen verwenden, um auf die Deklaration zu verweisen, und z.B.später eine Reihe von Instanzen erstellen, wie Sie haben:

struct car road[10]; 
+0

Sie könnten sogar die beiden Deklarationen kombinieren: 'struct car {...} road [10];' (wahrscheinlich keine gute Idee, obwohl). – melpomene

+0

danke, diese Antwort ist auch ziemlich präzise – penu

+0

@melpomene warum nicht eine gute Idee? – penu

1

Option 1 (ohne typedef):

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

struct car road[10]; 

Option 2 (mit typedef mit unbenannte struct):

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

car_t road[10]; 

Option 3 (mit typedef mit benannter Struktur):

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

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

Die Linux Coding Style Staaten:

Es ist ein Fehler für Strukturen zu verwenden typedef ...

Verwandte Themen