Подтвердить что ты не робот

"Undefined символы" ошибка компоновщика с простым классом шаблона

Ушел от С++ в течение нескольких лет, и я получаю ошибку компоновщика из следующего кода:

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

Использование Code:: Blocks и GCC, если это важно для любого. Кроме того, явным образом перенося некоторые вещи GA на С++ для удовольствия и практики.

4b9b3361

Ответ 1

Определение шаблона (файл cpp в вашем коде) должно быть включено до создания экземпляра данного класса шаблона, поэтому вам нужно включить описания функций в заголовок или #include cpp файл до использования класса ( или делать явные экземпляры, если у вас их ограниченное число).

Ответ 2

Включает файл cpp, содержащий реализации функций класса шаблонов. Однако, ИМХО, это странно и неудобно. Должен быть, конечно, это более легкий способ сделать это?

Если у вас есть только несколько разных экземпляров для создания и знать их заранее, вы можете использовать "явное инстанцирование"

Это работает примерно так:

В верхней части gene.cpp добавьте следующие строки

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

Ответ 3

В if(value >= this->minValue && value <= this->minValue) второй minValue должен быть maxValue, no?

Эхо, что сказал Шон: Что сообщение об ошибке? Вы определили и объявили функции, но вы нигде не использовали их нигде, и я не вижу ошибки (кроме опечатки).