简单模板类的“未定义符号”链接器错误

新手上路,请多包涵

离开 C++ 几年了,我从以下代码中得到一个链接器错误:

基因.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

基因.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 的东西移植到 C++ 中。

原文由 Ryan_IRL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 311
1 个回答

必须在实例化给定模板类之前包含模板定义(代码中的 cpp 文件),因此您必须在头文件中包含函数定义,或者在使用类之前#include cpp 文件(或显式如果您的实例数量有限,则实例化)。

原文由 Todd Gardner 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题