我试图创建这样的方法:
WeaponsDatabase
{
public:
template<typename Functor>
QList<const WeaponData*> getSpecificWeapons(Functor criterium);
};
template<typename Functor>
QList<const WeaponData*> WeaponsDatabase::getSpecificWeapons(Functor criterium)
{
QList<const WeaponData*> weaponsForCriterium;
foreach (const WeaponData *weapon, weapons)
{
if (criterium(weapon))
{
weaponsForCriterium.append(weapon);
}
}
return weaponsForCriterium;
}
看起来不错,然后编译。然后我尝试在其他地方使用它:
auto criterium = [hardpoint](const WeaponData *weapon)->bool
{
return weapon->hardpoint == hardpoint;
};
WeaponsDatabase::getInstance().getSpecificWeapons(criterium);
它不起作用,并且我不理解错误消息。伴侣可以帮我解释一下吗?
In file included from ..\equipmentgroupwidget.cpp:3:0:
..\weaponsdatabase.h:35:57: error: 'QList<const WeaponData*> WeaponsDatabase::getSpecificWeapons(Functor) [with Functor = EquipmentGroupWidget::EquipmentGroupWidget(const QString&, QWidget*)::<lambda(const WeaponData*)>]', declared using local type 'EquipmentGroupWidget::EquipmentGroupWidget(const QString&, QWidget*)::<lambda(const WeaponData*)>', is used but never defined [-fpermissive]
template<typename Functor> QList<const WeaponData*> getSpecificWeapons(Functor criterium);
答案 0 :(得分:0)
@WernerHenze的所有功劳-将实现转移到类中解决了该问题。非常感谢你的队友。