远离C ++几年,并从以下代码中获得链接器错误:

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

如果对任何人都很重要,请使用代码::块和海湾合作委员会。另外,清楚地将一些GA的东西移植到C ++以进行娱乐和练习。

有帮助吗?

解决方案

在实例化给定的模板类之前,必须包含模板定义(代码中的CPP文件),因此您要么必须在标题中包含函数定义,要么在使用该类之前#include cpp文件(或Do explicit实例化,如果您的数量有限)。

其他提示

包括包含模板类函数实现的CPP文件。但是,恕我直言,这很奇怪而尴尬。肯定有一种湿滑的方式吗?

如果您只有几个不同的实例可以创建并事先知道它们,则可以使用“显式实例化”

这是这样的工作:

在gene.cpp的顶部添加以下行

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

if(value >= this->minValue && value <= this->minValue) 第二 minValue 应该 maxValue, , 不?

回声肖恩说什么:错误消息是什么?您已经定义并声明了功能,但是您在任何地方都没有使用它们,也没有看到错误(除了错字)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top