专用纯虚拟模板函数(未定义引用)的另一个问题
Another issue with specialised pure virtual template function (undefined reference)
作为一个初学者,我在模板、继承和纯虚函数方面有一些问题。
请考虑以下内容,其中概率是实例化为理性概率的抽象模板。
概率.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() {};
};
概率.cpp : 空
RationalProbability.h:
#include "Probability.h"
class RationalProbability: public Probability<float>
{
public:
RationalProbability(float prob);
virtual ~RationalProbability();
RationalProbability* operator+(const RationalProbability& p);
};
合理概率.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+
。
我还建议您阅读并检查一些规范运算符实现,特别是对于二进制算术运算符,因为您不应该从 operator+
函数返回指针。它应该按值返回一个对象。否则,如果突然一次添加的结果是一个指针,那么像a + b + c
这样的事情会如何工作?
相关文章:
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 重载运算符*以获取对另一个类的实例的引用
- 使用 scope 运算符 (::) 引用另一个文件中的类
- 引用另一个文件夹中的.dll
- 是否可以在引用另一个派生类的派生类中声明复制构造函数?
- 引用另一个类时的 iStream 重载
- 对于具有两个模板化变量的模板化类,是否可以使一个 var 引用另一个 var
- 包含引用另一个矢量内容的矢量的对象
- 元组的一个元素可以引用另一个元素吗
- 通过引用另一个类方法传递向量成员变量
- 引用另一个 Windows Phone 运行时组件项目中一个 Windows Phone 运行时组件项目中的C++类
- C++ std::sort 引用另一个列表的自定义比较函数
- QT C++-如何引用另一个类中的小部件
- C++引用可以引用另一个对象吗
- 引用另一个库的c++静态库的链接器错误
- 问题处理缺点引用另一个类中的类
- 用户定义的dll引用另一个用户定义的dll时发生链接器错误
- 使用给定框架调用/引用另一个类C++变量或函数