2014-05-10 28 views
6

için bir yazım hatası bildirme İleri bir yazım hatası C++ ile bildirilmeyebilir, ancak aşağıdaki sorun için en iyi çözümün ne olabileceğini merak ediyorum. Bu gibi MyClass belirten bir başlık dosyası vardır:Şablon sınıfı

#include <TemplateClassHeaders> 

struct MyStruct 
{ 
    // ... 
} 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass birçok yerde kullanılmaktadır, ama daha çok bir işaretçi QT sinyal yuva mekanizması geçirilerek olarak. İhtiyaç duyulan her şey bir ileri bildirim olacaktır, ancak MyClass çalışmayan bir yazım hatasıdır. MyClass işaretçisini kullanan her başlığa myclass.h eklemekten kaçınmanın bir yolu var mı?

+0

'class Sınıfım; sorunuzu yazarken' Google, hatta http://stackoverflow.com/questions/804894/forward-declaration-of-a açığa çıkarmalıdır, önerilen SO bağlantısına bakarak -typedef-in-c? rq = 1 – mah

+1

@mah Bunu ikinci bir düşünceye ya da en azından otomatik olarak aşağı çekmek yerine tüm soruları okumak ve bana benzer bir soruya (şablonlar ve şablon argümanları olmadan) işaret etmek size "Sınıfım Sınıfım" çalışmayacak (ve yeniden adlandırmadan dolayı şablon içermese bile işe yaramayacaktır). – jaho

+0

@Marian, "class MyClass;", hiçbir şablon dahil edilmediyse işe yarar. –

cevap

10

Yazım hatası bildiremezsiniz. Ancak, hem TemplateClassName hem de MyStruct numaralı derslere dayanan sınıfları ileriye bildirirseniz, MyClass'u tanımlayabilmeniz gerekir.

namespace Really { 
    namespace Long { 
    template <typename> 
    class TemplateClassName; 
    } 
} 

class MyStruct; 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass *p = 0; 
+0

Gerçekten, teşekkürler. – jaho

+0

Bu çirkin, gereksiz karışıklığın düzeltilmesi gerekiyor. Milyonlarca kez daha gelişmiş özelliklerimiz var. "Hey, bu şeyi ** ismiyle ** kullan" temelde imkansız - biri, bir başkasının tanımladığı türden bir bilgi içeriyor. – user362515

İlgili konular