272 votes

Déclaration anticipée d’un typedef en C++

Pourquoi le compilateur ne m’avance laissera à déclarer un typedef ?

En supposant que c’est impossible, ce qui est la meilleure pratique pour garder mon arbre inclusion petit ?

191voto

JH. Points 980

Vous pouvez faire parvenir typedef. Mais pour faire

vous devez déclarer tout d’abord vers l’avant `` :

54voto

LittleJohn Points 211

Pour ceux d'entre vous qui comme moi, cherchez avant de déclarer un struct de type C qui a été défini à l’aide de typedef, dans du code c++, j’ai trouvé une solution qui va comme suit...

35voto

Pavel Points 1715

« Fwd déclare un typedef » vous devrez fwd déclarer une classe ou un struct et puis vous pouvez typedef déclarée de type. Plusieurs typedefs identiques sont acceptés par le compilateur.

Formule intégrale :

forme abrégée :

17voto

Adam Rosenfield Points 176408

En C++ (mais C pas clair), il est parfaitement légal de typedef un type deux fois, tant que les deux définitions sont complètement identiques :

9voto

tpdi Points 18427

Parce que, pour déclarer un type, sa taille doit être connue. Vous pouvez avant de déclarer un pointeur vers le type ou définition de type d'un pointeur vers le type.

Si vous le voulez vraiment, vous pouvez utiliser le pimpl idiome de garder le comprend vers le bas. Mais si vous souhaitez utiliser un type, plutôt qu'un pointeur, le compilateur doit connaître sa taille.

Edit: j_random_hacker ajoute une qualification importante pour cette réponse, en gros que la taille doit être de savoir pour utiliser le type, mais avant la déclaration peut être faite si l'on a seulement besoin de connaître le type existe, dans le but de créer des pointeurs ou des références de ce type. Depuis l'OP n'a pas montré de code, mais s'est plaint qu'il ne compile pas, je suppose (probablement à juste titre) que l'OP a été d'essayer d' utiliser le type, pas seulement de les consulter.

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