Метод класса, который принимает лямбду в качестве параметра - сообщение об ошибке - PullRequest
0 голосов
/ 26 января 2019

Я попытался создать такой метод:

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

1 Ответ

0 голосов
/ 27 января 2019

Все кредиты за @ WernerHenze - перемещение реализации в класс решили проблему. Большое спасибо, приятель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...