Erreur de lien de "symboles non définis" avec la classe de modèle simple
Été loin de C++ depuis quelques années et j'obtiens une erreur de l'éditeur de liens à partir du code suivant:
Gène.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;
}
À l'aide de Code::Blocks et GCC si important pour tout le monde. Aussi, clairement portage de certaines GA trucs à C++ pour le plaisir et la pratique.
source d'informationauteur Ryan_IRL
Vous devez vous connecter pour publier un commentaire.
La définition du modèle (le fichier cpp dans votre code) doit être inclus avant l'instanciation d'une classe de modèle, de sorte que vous devez inclure des définitions de fonction dans l'en-tête, ou #include le fichier cpp avant à l'aide de la classe (ou de n'explicite les instanciations si vous avez un nombre limité d'entre eux).
Y compris le fichier cpp contenant les implémentations de la classe de modèle des fonctions d'œuvres. Cependant, à mon humble avis, c'est bizarre et maladroit. Il doit y avoir certainement un ciré façon de faire cela?
Si vous avez seulement un peu différentes instances à créer, et les connaître à l'avance, vous pouvez utiliser "instanciation explicite"
Cela fonctionne quelque chose comme ceci:
En haut de gene.cpp ajoutez les lignes suivantes
Dans
if(value >= this->minValue && value <= this->minValue)
la deuxièmeminValue
devrait êtremaxValue
non?Écho à ce qu'Sean dit: Quel est le message d'erreur? Vous avez défini et déclaré les fonctions, mais vous ne les avez pas utilisés dans n'importe quoi n'importe où, je ne vois qu'une erreur (en plus de la faute de frappe).