2011-03-14 2 views
11

J'ai défini une structure opaque et les API connexes comme ceci:c typedef (ed) pointeur opaque

typedef struct foo foo; 
foo *create_foo(...); 
delete_foo(foo *f); 

Je ne suis pas en mesure de définir la structure dans mon fichier c. Donne une erreur de redéfinition.

typedef struct foo { 
    int implementation; 
}foo; 

Je suis en mesure d'utiliser foo dans le fichier c sans typedef mais je veux le typedef (à savoir l'utiliser directement comme foo *). Y a-t-il un moyen?

Répondre

18

Vous avez déjà le typedef dans votre en-tête, alors incluez-le et définissez struct foo dans l'implémentation sans le typedef.

foo.h:

typedef struct foo foo; 
foo *create_foo(...); 
delete_foo(foo *f); 

foo.c:

#include <foo.h> 

struct foo { int implementation; }; 
/* etc. */ 
+0

vrai. Je peux juste l'utiliser dans un fichier c sans le typer à nouveau. Muette de moi de poser une telle question. Merci de m'avoir fait réaliser cela. :) – Manish