- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为初学者,我在模板、继承和纯虚函数方面遇到了一些问题。
考虑以下内容,其中 Probability 是实例化为 RationalProbability 的抽象模板。
概率.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;
}
我收到以下错误:
Error:undefined reference to
Probability<float>::operator+(Probability<float> const&)
确实没有函数具有那个确切的签名,但是 RationalProbability 完全实现了模板
RationalProbability: public Probability<float>
最佳答案
如果你想让一个基类有一个抽象函数(一个你没有实现的虚函数)你应该这样说:
virtual Probability<T>* operator+(const Probability<T>& p) = 0;
= 0
是什么告诉编译器成员函数是一个抽象方法,必须被子类覆盖。
如果没有,必须有所有虚函数的定义(实现)。
如果您仔细查看错误消息,它会显示它是 Probability<float>::operator+
那是失踪,不是RationalProbability::operator+
.
我也建议你read and check some canonical operator implementations , 特别是 for the binary arithmetic operators ,因为你不应该从 operator+
返回一个指针功能。它应该按值 返回一个对象。否则,怎么会有像a + b + c
这样的东西呢?如果一个加法的结果突然是一个指针,工作?
关于c++ - 专门的纯虚模板函数的另一个问题(未定义引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42130980/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!