初心者として、テンプレート、継承、および純粋仮想関数に関するいくつかの問題があります。特殊な純粋仮想テンプレート関数(定義されていない参照)の別の問題
ここで、確率は、RationalProbabilityとしてインスタンス化された抽象テンプレートです。
Probability.h:
template <class T>
class Probability
{
public:
T value;
//Operator overloading for +
virtual Probability<T>* operator+(const Probability<T>& p);
T getValue() const { return value; }
protected:
Probability(T val) {
value = val;
}
~Probability() {};
};
Probability.cpp:空
RationalProbability.h:
#include "Probability.h"
class RationalProbability: public Probability<float>
{
public:
RationalProbability(float prob);
virtual ~RationalProbability();
RationalProbability* operator+(const RationalProbability& p);
};
RationalProbability.cpp:
#include "RationalProbability.h"
RationalProbability::RationalProbability(float prob): Probability(prob) {}
RationalProbability::~RationalProbability()
{
}
RationalProbability* RationalProbability::operator+(const RationalProbability& p) {
RationalProbability* rp = new RationalProbability(p.getValue() + this->value);
return rp;
}
私は次の取得ええROR:
Error:undefined reference to
Probability<float>::operator+(Probability<float> const&)
(その正確なシグネチャを持つ機能がないことは事実ですが、抽象機能を持つように、基本クラスを使用する場合はRationalProbabilityは
RationalProbability: public Probability<float>
純仮想関数を指定していないため、実装が必要です。 –
そして、 'operator +()'は動的に割り当てられたオブジェクトへのポインタを返します.... blech !!!これはJavaではありません。 – Peter