2010-07-06 31 views
7

Bir oyun yapıyorum ve Man isimli bir dersim var ve her ikisi de birbirlerine ihtiyaç duyan kodlarında Block adında bir sınıf var, ancak ayrı dosyalardalar. Bir sınıfı "önceden tanımlamak" için bir yol var mı? Objective-C'nin @ class makrosu gibi mi?C++: Birbirine ihtiyaç duyan iki sınıf

+2

İstediğiniz gibi geliyor ileriye dönük bir bildirim. BlockDude için – mooware

+0

+1. –

cevap

5

Dairesel bağımlılık denir. sınıfta Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

Ve sınıfta One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

"sınıfı Tek;" ve "sınıf iki;" direktifler sırasıyla bir "Bir" ve "İki" isimleri tahsis eder; ama ismin ötesinde başka hiçbir ayrıntı tanımlamazlar. Bu nedenle işaretçiler sınıf oluşturmak, ancak bütün sınıf şöyle içeremez:

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

derleyici sınıf bir kişi vardır bilse de, kötü kokan çünkü yukarıdaki iki örnek derlemek olmaz nedenidir Bir sınıfın hangi alanın, yöntemlerin veya sanal yöntemlerin olduğunu, yalnızca adın tanımlandığından, gerçek sınıf tanımını değil, içerebileceğini bilmek.

11

Evet.

class Man; 

Bu "eksik tipi" olarak Man ilan edecek. İşaretçiyi veya referansları ve diğer birkaç şeyi bildirebilirsiniz, ancak bir örnek oluşturamaz veya üyelerine erişemezsiniz. Bu, eksik bir türle yapabileceğiniz ve yapamayacağınız şeyin tam bir açıklaması değildir, ancak genel bir fikirdir.

+1

Dikkat edilmesi gereken önemli nokta, daha sonra tüm türlere devam edip dahil edip erişim kazanabilirsiniz. Başlıktaki eksik türleri kullanabilir ve daha sonra kullanmak için tam başlık tanımını cpp'ye dahil edebilirsiniz. –

İlgili konular