Avant les déclarations de sans nom struct

Bounty question: Donc, ces deux Foos ne sont pas la même chose. Des beaux. La deuxième forme est donnée dans une bibliothèque. Comment faire de l'avant-déclarer donné que je ne peux pas le changer?


J'ai toujours pensé que C et C++ permis déclarations répétées à condition qu'il n'y avait pas répété les définitions. Puis je suis tombé sur ce problème lors de la tentative d'écrire du code C++ qui s'étend d'une bibliothèque C.

struct Foo;
typedef struct {} Foo;

Cela donne l'erreur suivante:

'struct Foo' une précédente déclaration en tant que 'struct Foo'

Je veux de l'avant-déclarer, darn it! Quel est le problème ici?

  • Quel est le compilateur? Aussi, peut-être le vide déclaration tracasse il?
  • Il n'y a pas de langage appelé "C/C++", en particulier dans le contexte de structures. Il y a trop présumé de C++ écrivains à litière "struct" au-dessus de leur code comme il a été 1989.
  • il n'y a rien de mal avec struct dans le code C++, je l'utilise pour indiquer que je suis en train d'écrire un capsulées type de POD.
  • Je pense que Kerrek est en se référant à la C "idiome" de ne pas cacher structs derrière un typedef, au lieu de faire des choses comme nulle foo(struct MyStruct *p);.
  • Exactement. Et des choses comme typedef définitions, typedef struct Foo { /* ... /* } Foo;.
InformationsquelleAutor spraff | 2011-08-31