[英]C++ Inheritance with templates undefined reference error
我想实现一个有多个孩子的基类。
template <typename T>
class Trigger
{
protected:
T threshold;
Trigger(T a_threshold) : threshold(std::pow(10, a_threshold / 20)){};
public:
void setThreshold(T a_threshold)
{
threshold = std::pow(10, a_threshold / 20);
}
virtual bool operator()(const T &first, const T &second) const;
virtual ~Trigger() = default;
};
template <typename T>
class ZeroCrossingRisingTrigger : public Trigger<T>
{
public:
ZeroCrossingRisingTrigger(void) : Trigger<T>(0.){};
bool operator()(const T &first, const T &second) const override
{
return (first <= 0) & (second > 0);
}
};
#include "Trigger.hpp"
int main([[maybe_unused]] int argc, [[maybe_unused]] char const *argv[])
{
Trigger::ZeroCrossingRisingTrigger<double> trig;
return 0;
}
但是当我尝试编译它时出现以下错误:
(...): 对`Trigger::Trigger::operator()(double const&, double const&) const'的未定义引用
我不明白为什么会出现此错误,因为我完全按照错误消息中的说明实现了运算符。
您尚未为Trigger<T>
定义operator()
的实现。 一种选择是通过使运算符成员函数成为纯虚函数来使Trigger
成为抽象基类:
virtual bool operator()(const T &first, const T &second) const = 0;
或者,您可以提供一个空的实现。
附带说明一下,在ZeroCrossingRisingTrigger
的构造函数中,您将0.0
作为基类构造函数的参数传递。 这种提示不需要对ZeroCrossingRisingTrigger
本身进行模板化,除非您想从外部控制0.0
文字的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.