2016-01-15 12 views
5

bir sınıf, ad veya numaralandırma değil ve aşağıdaki kodu var Ben derlemeye çalıştığımda aşağıdaki almak neden t anlamaya:şablon ve türetilmiş sınıf tanımı: hatası: 'myClass' ı C++ şablonları öğrenmeye çalışıyorum

Bu fonksiyonun tanımı benziyor
test.cpp:17:1: error: 'myClass' is not a class, namespace, or enumeration 
myClass::myClass(void) : std::stack<T>(){ 
^ 
test.cpp:8:9: note: 'myClass' declared here 
class myClass : public std::stack<T>{ 
     ^
1 error generated. 

hataya neden, ama ben bu hatayı alıyorum neden, bana Tamam görünüyor bilmiyorum (eğer gerçekten iyi değil sanırım bile), belki de bir sözdizimi hatası? ..

clang ++ -Wall -Werror -Wextra -c ile derledim.

Bu hataya ne neden olabilir?

+2

Yan Not: bir işlev 'myClass() sadece kullanmak, herhangi bir parametre olmadığını' void' belirtmek gerekmez; '. – user657267

+1

@ user657267 Bu doğru, aslında, ama okulda programlama tarzı nedeni programlamada kullanmak zorundayım (okulum tarafından sorulan, alışkanlığı aldım). – vmonteco

cevap

8

myClass bir şablon sınıfı olduğundan, bunun için şablon parametresini belirtmeniz gerekir.

template<typename T> 
myClass<T>::myClass(void) : std::stack<T>() { 
//  ~~~ 
} 

BTW: : std::stack<T>() gereksiz gibi görünüyor.

LIVE

+0

İşte buydu! Çok teşekkür ederim, bu aptalca bir soruydu, belki de kötüyüm! Bunun nedeni, derleyicinin bu parametrenin, üye işlevlerini tanımlamadan önce sınıfın "anlaşılmasını" gerektirmesi gerektiğinden mi? (Yine de yanlış olabilirim, bunun amacını anlamaya çalışıyorum) – vmonteco

+0

@vmonteco Ben öyle düşünmüyorum. Derleyicinin sadece 'myClass' ı takip etmesi gerektiğini düşünüyorum, çünkü bu bir şablon. Yani farklı bir şekilde, derleyici 'myClass' adlı şablon olmayan bir sınıf bulamıyor. – songyuanyao

+0

@songyuanyo Yeni bir parametre olarak geçersem de gerekli olduğunu öğrendim, bu yüzden sınıf tanımının bir türü olduğunu düşünüyorum. (Belki de böyle bir şey ** myClass ** -> şablon ve ** myClass ** -> şablon ile oluşturulan class sınıfı?), (BTW, ne demek "std :: stack ()" gereksizdir, Bu durumda olmadan yapabilirim? – vmonteco

İlgili konular