2009-06-16 10 views
13

ile bağlayıcı hatası birkaç yıldır ++ uzakta C mu ve aşağıdaki koddan bir bağlayıcı hatası alıyorum:"Tanımsız sembolleri" basit bir şablon sınıfına

Gene.h

#ifndef GENE_H_INCLUDED 
#define GENE_H_INCLUDED 

template <typename T> 
class Gene { 
    public: 
    T getValue(); 
    void setValue(T value); 
    void setRange(T min, T max); 

    private: 
    T value; 
    T minValue; 
    T maxValue; 
}; 

#endif // GENE_H_INCLUDED 

Gene.cpp

#include "Gene.h" 

template <typename T> 
T Gene<T>::getValue() { 
    return this->value; 
} 

template <typename T> 
void Gene<T>::setValue(T value) { 
    if(value >= this->minValue && value <= this->minValue) { 
     this->value = value; 
    } 
} 

template <typename T> 
void Gene<T>::setRange(T min, T max) { 
    this->minValue = min; 
    this->maxValue = max; 
} 

Kod :: Bloklar ve GCC'yi kullanan herkes için önemliyse. Ayrıca, eğlenceli ve pratik yapmak için bazı GA öğelerini C++'ya açıkça taşıyor.

+0

Tam hata iletileri yardımcı olabilir. –

+2

olası nüshası [Neden şablonlar sadece başlık dosyasında uygulanabilir?] (Http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) –

cevap

21

Belirli bir şablon sınıfını oluşturmadan önce şablon tanımının (kodunuzdaki cpp dosyası) dahil edilmesi gerekir, bu nedenle ya üstbilgideki işlev tanımlarını dahil etmeniz ya da sınıfı kullanmadan önce cpp dosyasını eklemeniz gerekir. (veya sınırlı sayıda varsa açık örnekleme yapın).

+0

Teşekkürler! Bunu bir noktada öğrenmiş olmalıyım. Belki şimdi yapışacaktır: D –

+2

Veya sadece tüm şablon başlık dosyasında uygulayın. İlgili soruya bakın [Neden şablonlar sadece başlık dosyasında uygulanabilir?] (Http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) – ecerulm

2

Şablon sınıfı işlevlerinin uygulamalarını içeren cpp dosyası çalışır. Ancak, IMHO, bu garip ve garip. Bunu yapmanın daha net bir yolu olmalı? gene.cpp eklenti üst kısmında

:

oluşturmak yalnızca birkaç farklı örneği ve önceden bildiğimiz, o zaman

Bu şöyle çalışır "açık örnekleme" kullanabilirsiniz if(value >= this->minValue && value <= this->minValue) ikinci minValue olarak

template class Gene<int>; 
template class Gene<float>; 
1

aşağıdaki hatlarının, maxValue olmalıdır?

Sean'ın söylediklerine ek olarak: Hata mesajı nedir? İşlevleri tanımladınız ve ilan ettiniz, ancak onları herhangi bir yerde kullanmadınız ya da bir hata görüyorum (yazım hatası dışında).