Pourquoi ne “définition de type struct { struct S *s; } S;” contenant un pointeur vers un même type de compilation?

Je suis en train de typedef un struct qui contient un pointeur vers un autre du même type.

C'est ce que je pensait être la meilleure version:

typedef struct Element
{
    char value;
    struct Element *next;
} Element;

Pourquoi est-ce une variante de la compilation + exécution?:

typedef struct
{
    char value;
    struct Element *next;
} Element;

Pour décrire la première je dirais: "Nom struct Element Element maintenant" et le second: "Prenez cet anonyme struct et de l'appeler Element"

Mais pourquoi ne puis-je encore déclarer un struct Element (à l'intérieur de la structure (struct) dans le second cas?

(Travail en GCC et MSVC)

  • dans le second cas, votre *suivant est le fait de tourner dans un struct struct {}, vous avez besoin de lire sur ce type de définir la réalité.
  • Remplacement de struct Element *next; avec Element *next; est signalé comme une erreur. Ou tu veux dire quoi?
  • Ce n' struct struct {} veux dire? Dans le second cas, next est un pointeur vers struct Element; le problème est que struct Element est un type incomplète.
  • Comment version: stackoverflow.com/questions/3988041/...
InformationsquelleAutor ordag | 2011-09-19