2012-04-30 14 views
10

Kubuntu'da Kdevelop kullanıyorum. benim datasetup.h dosyasında bir yapıya ilan ettiler:"Bilinmeyen tür" başlık dosyasında bir yapı kullanma hatası

georeg_chain.c:7:3: error: unknown type name 'georeg_val'

: Şimdi benim main.c dosyasında kullandığınızda

#ifndef A_H 
#define A_H 

struct georeg_val { 

    int p; 
    double h; 
    double hfov; 
    double vfov; 
}; 

#endif 

int main() 
{ 
    georeg_val gval; 

    read_data(gval); //this is in a .cpp file 

} 

aşağıdaki hatayı alıyorum

(Bu georeg_val gval; uyumludur)

kimse yardımcı olabilirseniz çok memnun olurum Bu hatayı çözmeme izin verin. Eğer yeni bir tür tanımlamak gerekirse

+0

birlikte burada C ve C++ karıştırma musunuz ilan ediyor? –

+0

Başlığı içe aktardığınızdan emin olun: "import" datasetup.h "'. – piperchester

cevap

21

yapı bildirmek için iki ihtimal vardır a struct:

struct STRUCT_NAME myStruct; 

ikinci yöntemi kullanmak Ancak eğer (yapı bir alia elde ler) o zaman struct tanımlayıcı atlayabilirsiniz - derleyici o alias olan tek verilen değişkenin türünü çıkarabiliriz:

STRUCT_ALIAS myStruct; 

Bonus puanlar: Bunu adı ve takma ad hem yapı bildirmek edebilirsiniz:

typedef struct STRUCT_TAG {} STRUCT_TAG; 
// here STRUCT_NAME == STRUCT_ALIAS 

Sonra değişken tanımında ilk veya ikinci metodu kullanabilirsiniz. Neden her iki dünya da iyi? Yapı takma adı, yapı değişkenleri tanımlarını kısaltmanızı sağlar - bu bazen iyi bir şeydir. Ancak struct ismi, forward declarations yapalım. - Bazı durumlarda vazgeçilmez bir araçtır Hangi yapılar arasındaki dairesel referanslara sahip düşünün: bu mimari kusurlu olabilir yanında

struct A { 
    struct B * b; 
} 
struct B { 
    struct A * a; 
} 

- yapılar (adlarla) birinci şekilde beyan edildiği derlemek VE yapı bu döngüsel tanım İşaretçiler, struct olarak işaretleyerek açıkça başvurulur.

6

, sen yazmak zorunda:

typedef struct { 

    int p; 
    double h; 
    double hfov; 
    double vfov; 
} georeg_val ; 

Ardından, Yeni türü olarak georeg_val kullanabilirsiniz. Açıkça işaretleyerek olmanın değişkeni tanımlamak gerekir -

struct STRUCT_NAME {} ; 

veya

typedef struct {} STRUCT_ALIAS; 

Eğer (yapı bir isim vermek) birinci yöntemi ise

C birinde

+4

Veya "struct georeg_val gval", "main" satırına geçin, –

+1

@dead_jake Ayrıca main.c dosyasındaki header dosyası da (henüz yapmadıysanız) – Praetorian

3

(bir ikili arama ağacı yapı bu örnekte üzerine) bir yapı tipini tanımlama:

struct tree { 
    int info; 
    struct tree *left; 
    struct tree *right; 
} 

typedef struct tree treeNode; 

bir işlev örneğin .:

treeNode *insertElement(treeNode *treeA, int number); 
İlgili konular