Вы передаете указатель на функцию-член (pmr), где вам нужен указатель на функцию (конструктор преобразования std::function
).
Вам нужно либо объявить writeTeams
как static
, либо связать pmr с экземпляром teamType
(невидимый первый аргумент pmr), чтобы получить std::function
, который принимает один аргумент.
Давайте упростим ваш код до минимального, полного примера (поскольку материал Qt и шаблон здесь просто отвлекают):
#include <functional>
void example(std::function<void(int)> func)
{
func(1);
}
struct teamType
{
void writeTeams(int);
};
int main()
{
example(&teamType::writeTeams);
}
Это не скомпилируется:
60725415.cpp: In function ‘int main()’:
60725415.cpp:19:13: error: could not convert ‘&teamType::writeTeams’ from ‘void (teamType::*)(int)’ to ‘std::function<void(int)>’
19 | example(&teamType::writeTeams);
| ^~~~~~~~~~~~~~~~~~~~~
| |
| void (teamType::*)(int)
Я могу написать (если writeTeams
не нужны teamType
члены):
struct teamType
{
static void writeTeams(int);
};
Или я могу привязать к конкретному c экземпляру из teamType
:
int main()
{
using namespace std::placeholders;
teamType the_team;
example(std::bind(&teamType::writeTeams, the_team, _1));
}