سؤال

كان بعيدا عن 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;
}

باستخدام الرمز :: كتل و GCC إذا كان يهم لأي شخص. أيضا، قم بتنفيذ بعض الأشياء GA إلى C ++ للمتعة والممارسة.

هل كانت مفيدة؟

المحلول

يجب تضمين تعريف القالب (ملف CPP في التعليمات البرمجية) قبل إنشاء فئة قالب معينة، لذلك عليك إما أن تتضمن تعريفات الوظائف في الرأس، أو #include ملف CPP قبل استخدام الفئة (أو القيام بصراحة إرساء إذا كان لديك عدد محدود منهم).

نصائح أخرى

بما في ذلك ملف CPP الذي يحتوي على تطبيقات وظائف فئة القالب تعمل. ومع ذلك، IMHO، هذا غريب وحرج. يجب أن يكون هناك بالتأكيد طريقة باهظة للقيام بذلك؟

إذا كان لديك سوى عدد قليل من الحالات المختلفة لإنشاءها، ومعرفةها مسبقا، يمكنك استخدام "إنشاء مثيل صريح"

هذا يعمل بشيء مثل هذا:

في الجزء العلوي من 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