45 votes

Déclarations en avant de structures non nommées

Question de prime : Donc, ces deux Foo ne sont pas la même chose. Bien. La deuxième forme est donnée dans une bibliothèque. Comment puis-je le redéclarer étant donné que je ne peux pas le modifier ?


J'ai toujours pensé que le C et le C++ autorisaient les déclarations répétées à condition qu'il n'y ait pas de définitions répétées. J'ai ensuite rencontré ce problème en essayant d'écrire du code C++ qui étend une bibliothèque C.

struct Foo;
typedef struct {} Foo;

Cela donne l'erreur suivante :

La déclaration précédente de 'struct Foo' était 'struct Foo'.

Je veux faire une déclaration préalable, bon sang ! Qu'est-ce qui ne va pas ici ?

0voto

K-ballo Points 44794

Vous ne pouvez pas le déclarer avant, puisqu'il n'est pas nommé. C'est une structure non nommée, pour laquelle Foo est un typedef.

0voto

venomrld Points 383

Vous essayez de typedef un nom précédemment utilisé. L'énoncé est parfaitement valide, seulement vous devez utiliser un nom différent.

struct Foo; // Forward declaration of struct Foo
typedef struct {} anotherFoo; // Another structure typedefed
struct Foo {
 // Variables
}; // Definition of the forward declared Foo.

Notez que le typedef ne peut pas être utilisé dans le même nom.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X