回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体

Callback method shows error a value of type "void(*) cannot be used to initialize an entity of type

本文关键字:类型 不能 实体 初始化 用于 void 显示 方法 错误 回调      更新时间:2023-10-16

我有一个回调方法。它的签名是

typedef unsigned int event_id_t;
typedef void(__stdcall* event_cb)(int service_id, event_id_t event_id);

我定义了一个回调方法,如下所示

void event_callback(int service_id, event_id_t event_id) {
std::cout << _func_ << ": service_id: " << service_id << "; event_id: " << event_id << std::endl;
}

但是当我将回调方法分配给变量时出现错误

event_cb cb = event_callback;

此行给出错误

类型为 "void(*( (int serviceid....不能用于 初始化类型 event_cb 的实体

严格来说:

typedef void(__stdcall* event_cb)(int service_id, event_id_t event_id);

void event_callback(int service_id, event_id_t event_id) {
std::cout << _func_ << ": service_id: " << service_id << "; event_id: " << event_id << std::endl;
}

属于不同的类型(由于调用约定(,因此分配失败。

要修复它,只需在您这边添加__stdcall:

void __stdcall event_callback(int service_id, event_id_t event_id) {}