2011-03-14 20 views
11

böyle opak yapısını ve ilgili API'leri tanımladığınız:c typedef (ed) opak işaretçi

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

benim c dosyasında yapısını tanımlamak mümkün değilim. Yeniden tanımlama hatası verir.

typedef struct foo { 
    int implementation; 
}foo; 

Ben typedef olmadan c dosyasında foo kullanmak mümkün ama ben typedef (yani foo * olarak doğrudan kullanmak) istiyorum. Bir yolu var mı?

cevap

18

Başlığınızda zaten typedef var, bu nedenle tanımlamasını olmadan gerçekleştirin.

foo.h

:

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

foo.c:

#include <foo.h> 

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

doğrudur. Tekrar yazmadan sadece c dosyasında kullanabilirim. Böyle bir soru sormam için aptalım. Bunu anladığın için teşekkürler. :) – Manish