【发布时间】:2021-06-24 15:43:51
【问题描述】:
我有一个这样的模板类:
Strip.h
#pragma once
class IStrip
{
public:
int Pin;
void compute();
};
template <int PIN>
class Strip : public IStrip
{
public:
int Pin = PIN;
void compute()
{
}
};
我像这样管理它们的多个实例:
Manager.h
#pragma once
#include "Strip.h"
class Manager
{
private:
Strip<12> inst12;
Strip<13> inst13;
template <typename Func>
void each(Func f)
{
f(inst12);
f(inst13);
}
void computeData()
{
each([](IStrip sm)
{ sm.compute(); });
}
};
现在,每当我调用 computeData() 时,我想将一些逻辑应用于我的所有实例,如 each(Func f) 所示,但是,每当我编译时,我都会收到:
.pio\main.cpp.o:(.literal._ZN6Strips4loopEv[Strips::loop()]+0x14): undefined reference to `IStrip::compute()'
.pio\main.cpp.o: In function `Strips::computeData()::{lambda(IStrip*)#1}::operator()(IStrip*) const':
.pio\libdeps\az-delivery-devkit-v4\FastLED\src/controller.h:171: undefined reference to `IStrip::compute()'
当我把computeData的函数体改成:
each([](auto sm)
{ sm.compute(); });
并使用-std=gnu++14 编译,它神奇地工作,但是,当尝试调用compute() 时,程序毫无例外地停止。
我错过了一个重要的细节吗?提前致谢。
【问题讨论】: