接受 lambda 作为参数的类方法 - 错误消息

A class method which accepts lambda as parameter - error message

本文关键字:类方法 错误 消息 参数 lambda 接受      更新时间:2023-10-16

我尝试创建这样的方法:

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);

@WernerHenze的所有功劳 - 将实现移动到类中解决了这个问题。非常感谢伙计。