2010-07-16 19 views
11
Başka bir sınıftan değişkenleri getirmesi extern kullanıyorum

ve int yıllardan, şamandıra en vb çalışıyor ...Dış Yapı?

Ama bu işe yaramazsa, ben bunu nasıl bilmiyorum:

Class1.cpp

struct MyStruct { 
int x; 
} 

MyStruct theVar; 

Class2.cpp

extern MyStruct theVar; 

void test() { 
int t = theVar.x; 
} 

Sınıf2 MyStruct olduğunu bilmiyor çünkü çalışmıyor.

Bunu nasıl düzeltirim? :/

Aynı yapıyı Class2.cpp'de bildirmeyi denedim ve derledim, ancak değerler yanlıştı.

cevap

17

struct MyStruct bildirim belgesini bir .h dosyasına koyun ve bunu hem class1.cpp hem de class2.cpp dosyasına ekleyin.

IOW:

Myst.h

struct MyStruct { 
int x; 
}; 

Class1.cpp

#include "Myst.h" 

MyStruct theVar; 

Class2.cpp Önce bir sınıfta yapı tanımlamak gerekir

#include "Myst.h" 

extern struct MyStruct theVar; 

void test() { 
int t = theVar.x; 
} 
+0

Teşekkürler, şimdi iyi çalışıyor :) –

+0

Yapı tanımının da üstbilgide mi yer alması gerekiyor? Ya da tanım kaynak .cpp'ye bölünebilir mi? – cjcurrie

+0

Yardım ettiğin için teşekkürler – achoora

0

veya ortak başlık dosyası. Bu ilk tanımı, örneğin #include "Class1.h" aracılığıyla dahil ettiğinizden emin olun.

Sonra Bu ifade bir başlık dosyasında olması gerekmez extern struct MyStruct theVar;

söylemek ifadenizi değiştirmeniz gerekir. Küresel olabilir.

Düzenleme: Bazı .CPP dosyalarının özgün bildirimi içermesi gerekir. Tüm extern, derleyicinin/linker'ın başka bir yerde bulunduğuna ve programın oluşturulduğunda, geçerli tanımı bulacağına güvenmesini söyler. Bir yerde struct MyStruct theVar tanımlamıyorsanız, bağlayıcıya ulaştığında büyük olasılıkla derlenmeyecektir.

+2

Derleyiciye MyStruct'ın var olduğunu söylemek yeterli, ancak herhangi bir üyeye erişmeye çalıştığınız anda başarısız olacak. –