class XM : public QObject
{
Q_OBJECT
public:
explicit XM( QObject *parent = nullptr);
void login();
private:
quint32 counter;
typedef void(XM::*callback)(quint32);
QMap<qint32, callback > commands;
quint32 send(callback cb);
void login_cb();
private slots:
void ready();
};
void XM::login()
{
this->send(&XM::login_cb);
}
quint32 XM::send(callback cb)
{
// тут отправили задачу на сервер
this->commands.insert(this->counter, cb);
this->counter+=2;
}
void XM::ready(quint32 counter, quint32 data)
{
// тут приняли ответ
callback fut = this->commands.take(counter);
fut(data);
}
void XM::login_cb(quint32 data)
{
// тут нужен тот же this, что был в login
qDebug() << data;
}
这是代码,如果你把所有的肉都扔掉。
错误
ошибка: called object type 'XM::callback' (aka 'void (XM::*)(quint32)') is not a function or function pointer
要调用非静态方法,你需要一个对象,所以只需这样写:
其次,声明方法的签名与定义中的签名不匹配。具体来说
XM::login_cb
,它没有参数,但是您将其定义为具有一个参数。 slot 也是如此ready
。只需仔细审查。