Question

Vous connaissez loin de C ++ pour quelques années et je suis obtenir une erreur de liaison du code suivant:

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;
}

Utilisation de Code :: Blocks et GCC s'il importe à tout le monde. En outre, le portage des choses clairement GA à C ++ pour le plaisir et la pratique.

Était-ce utile?

La solution

La définition du modèle (le fichier cpp dans votre code) doit être inclus avant l'instanciation d'une classe de modèle donné, vous devez soit inclure des définitions de fonctions dans l'en-tête, ou #include le fichier cpp avant d'utiliser la classe ( ou faire instanciations explicites si vous avez un nombre limité d'entre eux).

Autres conseils

Y compris le fichier cpp contenant les implémentations des œuvres de fonctions de classe modèle. Cependant, à mon humble avis, cela est bizarre et maladroit. Il doit sûrement y avoir un moyen Slicker de le faire?

Si vous avez seulement quelques cas différents pour créer, et les savoir à l'avance, vous pouvez utiliser « instanciation explicite »

Cela fonctionne comme ceci:

En haut de gene.cpp ajouter les lignes suivantes

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

Dans le second if(value >= this->minValue && value <= this->minValue) minValue doit être maxValue, non?

Echo ce que Sean dit: Quel est le message d'erreur? Vous avez défini et déclaré les fonctions, mais vous ne les ai pas utilisé dans quoi que ce soit partout, et je ne vois une erreur (en plus de la faute de frappe).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top