回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
Callback method shows error a value of type "void(*) cannot be used to initialize an entity of type
我有一个回调方法。它的签名是
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) {}
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 为什么 int 类型的枚举类值不能用作 int
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 为什么模板引用类型不能用作模板类型别名参数?
- 函数指针类型不能用于函数原型
- 为什么静态大小数组类型不能是容器类型
- 具有返回类型的函数模板,该返回类型不能从参数中推导出来
- 递归提升::变量类型不能用"-std=c++11 -stdlib=libc++"编译
- std::is_trivially_copyable - 为什么易失性标量类型不能轻易复制
- CV 合格类型不能转换为 CV 不合格类型
- 枚举类型不能接受 CIN 命令
- 在c++程序中,哪种数据类型不能作为异常抛出
- 为什么自动类型不能与c++语句中的其他内置类型共存
- Auto it = vector.begin()结果类型不能转换为const_iterator
- 为什么boost::fusion序列中的struct数组成员类型不能正确推导
- 强制std::map的键类型不能为const