2016-03-24 21 views
0

Sınıf Vektörü oluşturduğumda neden çakıldığını bilmiyorum. Lütfen yardım et. Bu programda bir dizi içine herhangi bir eleman eklemek istiyorum. Ben Şablon sınıfı tanımlanır aynı başlığında (kurucu tanımları dahil) üye işlev tanımları yerleştirmeniz gerekir, Çapraz gcc ile tutulma UbuntuBoş Konsollarla Varsayılan Oluşturucu C++ Hatası

template<typename T> 
class Vector{ 
    public: 
     Vector(); 
     void add(const T&); 
    private: 
     T *elem; 
     int cap; 
     int len; 
}; 

template<typename T> 
Vector<T>::Vector(){ 
    len = 0; 
    cap = 30; 
    elem = new T[cap]; 
} 

template<typename T> 
void Vector<T>::(const T& m){ 
    elem[len] = m; 
    len ++; 
} 

// Here I create Vector v, if I put Vector<int> v() I don't get error 
Vector<int> v; //error "undefined reference to `Vector<int>::Vector()" 
v.add(21); //error 
+1

Lütfen bir [mcve] belirtin. – Barry

+0

@Brian "Çok ilginç özellikler" kullanmadığınız için çok eğlenceli. Bunu hayal bile edemiyorum. :) –

+0

Derleyicinin, 'Vector 'nu kullanmayı planladığınız noktadaki şablon tanımlarının (hem Vector sınıfı hem de onun üye işlevleri) görünürlüğüne ihtiyacı var. Ayrı derleme ve şablonlar birlikte iyi oynamıyor. Sınıfı bildiren üstbilgide üye işlevlerinin tanımını yerleştirin ve 'Vector' şablonunu kullanması gereken kodda bu başlığı dahil ettiğinizden emin olun. [Bu tam bir cevap değil]. – Peter

cevap

1

kullanın. bu ifadeye

// here i create Vector v, if i put Vector<int> v() i don't get error 
Vector<int> v(); 

gelince

o zaman dönüş türü Vector<int> sahiptir ve parametreleri olmayan bir işlev beyanıdır. Bu, Vector<int> türünde bir nesnenin tanımı değildir.

İlgili konular