从类模板继承时遇到了一些麻烦。
template < typename T>
class VdpCondition : public Condition {
public:
virtual T getElem(VehicleDataProvider) = 0;
bool testCondition(Veins::TraCIMobility* car) {
cModule* parent = car->getParentModule();
assert(parent != nullptr);
ItsG5Middleware* appl = dynamic_cast<ItsG5Middleware*>(parent->getSubmodule("appl"));
assert(appl != nullptr);
return (getElem(appl->getDataProvieder()) >= elem);
}
T elem;
};
class SpeedCondition : public VdpCondition<boost::units::quantity<boost::units::si::velocity>>{
public:
SpeedCondition(double speed)
{
elem = (speed * boost::units::si::meter_per_second);
}
boost::units::quantity<boost::units::si::velocity> getElem(VehicleDataProvider prov) {
std::cout << prov.speed().value() << std::endl;
return prov.speed();
}
};
它编译得很好,没有出现错误,但如果我尝试启动我的应用程序,我会收到链接错误..
undefined symbol: _ZN12VdpConditionIN5boost5units8quantityINS1_4unitINS1_4listINS1_3dimINS1_21length_base_dimensionENS1_15static_rationalILl1ELl1EEEEENS4_INS5_INS1_19time_base_dimensionENS7_ILln1ELl1EEEEENS1_18dimensionless_typeEEEEENS1_18homogeneous_systemINS4_INS1_2si15meter_base_unitENS4_INS1_16scaled_base_unitINS1_3cgs14gram_base_unitENS1_5scaleILl10ENS7_ILl3ELl1EEEEEEENS4_INSH_16second_base_unitENS4_INSH_16ampere_base_unitENS4_INSH_16kelvin_base_unitENS4_INSH_14mole_base_unitENS4_INSH_17candela_base_unitENS4_INS1_5angle16radian_base_unitENS4_INSV_19steradian_base_unitESD_EEEEEEEEEEEEEEEEEEEEvEEdEEEC2Ev
起初,我认为这是因为我使getElem纯虚拟并在模板类中使用它,但我试图删除VdpCondition的所有功能,但仍然会发生错误。 现在我不知道我必须在哪里搜索错误。
也许你看到我做错了什么?我不明白为什么这会编译而不是链接..