【发布时间】:2021-12-21 02:35:27
【问题描述】:
我想实现一个有多个孩子的基类。
基类
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' 的未定义引用
我不明白为什么会出现此错误,因为我完全按照错误消息中的说明实现了运算符。
【问题讨论】:
-
它没有定义你只是宣布了它
-
虚拟和模板不能很好地混合在一起stackoverflow.com/questions/2354210/…
-
感谢您的 cmets。你会推荐使用 CRTP 来实现它吗?
-
要么在基类中提供一个实现,要么使其成为纯粹的 (
virtual bool operator()(const T &first, const T &second) const = 0;)
标签: c++ templates inheritance