Pregunta

Has alejado de C ++ durante unos años y estoy recibiendo un error de enlazador el siguiente código:

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

El uso de Code :: Blocks y GCC si importa a nadie. Además, portar claramente algunas cosas GA a C ++ para la diversión y la práctica.

¿Fue útil?

Solución

La definición de plantilla (el archivo CPP en su código) tiene que ser incluido antes de crear instancias de una clase de plantilla dada, así que o bien tiene que incluir las definiciones de funciones en la cabecera, o # include el archivo CPP antes de usar la clase ( o hacer instanciaciones explícitas si usted tiene un número limitado de ellos).

Otros consejos

Cómo incluir el archivo CPP contiene las implementaciones de las obras funciones de clase plantilla. Sin embargo, en mi humilde opinión, esto es raro y torpe. Seguramente debe haber una manera más pulido de hacer esto?

Si usted tiene sólo unos pocos casos diferentes de crear, y los conoce de antemano, a continuación, puede utilizar "instanciación explícita"

Esto funciona así:

En la parte superior de gene.cpp añadir las siguientes líneas

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

En el segundo if(value >= this->minValue && value <= this->minValue) minValue debe maxValue, no?

Echo lo dijo Sean: ¿Cuál es el mensaje de error? Que haya definido y declarado las funciones, pero no se les ha utilizado en nada en ninguna parte, ni veo un error (además del error tipográfico).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top