"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 на С++ для удовольствия и практики.
Ответы
Ответ 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?
Эхо, что сказал Шон: Что сообщение об ошибке? Вы определили и объявили функции, но вы нигде не использовали их нигде, и я не вижу ошибки (кроме опечатки).