Grand central dispatch 调度“U块”创建-“;对';调度块创建和x27&引用;
我试图在Grand central dispatch 调度“U块”创建-“;对';调度块创建和x27&引用;,grand-central-dispatch,objective-c++,Grand Central Dispatch,Objective C++,我试图在.mm文件中使用dispatch\u block\u create创建块 dispatch_block_t testBlock = dispatch_block_create(0, ^{ NSLog(@"Hello"); }); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1), dispatch_get_main_queue(), testBlock); dispatch_block_cancel(testBlock); X
.mm
文件中使用dispatch\u block\u create创建块
dispatch_block_t testBlock = dispatch_block_create(0, ^{
NSLog(@"Hello");
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1), dispatch_get_main_queue(), testBlock);
dispatch_block_cancel(testBlock);
Xcode抱怨:
调用“dispatch\u block\u create”时没有匹配的函数
我甚至尝试添加:
#import <dispatch/block.h>
#导入
您遗漏了编译器错误的一个关键部分。我得到:
foo.mm:6:34: error: no matching function for call to 'dispatch_block_create'
dispatch_block_t testBlock = dispatch_block_create(0, ^{
^~~~~~~~~~~~~~~~~~~~~
/usr/include/dispatch/block.h:171:1: note: candidate function not viable: no known conversion from 'int' to 'dispatch_block_flags_t' for 1st argument
dispatch_block_create(dispatch_block_flags_t flags, dispatch_block_t block);
^
1 error generated.
关键部分是“候选函数不可行:第一个参数没有从'int'到'dispatch\u block\u flags\t'的已知转换”。这是由于(目标-)C++更严格的类型检查。您需要显式地将0
强制转换为dispatch\u block\u flags\u t
:
dispatch_block_t testBlock = dispatch_block_create(static_cast<dispatch_block_flags_t>(0), ^{ ... });
dispatch\u block\u t testBlock=dispatch\u block\u create(静态转换(0),^{…});
这很奇怪。。。您是否安装了最新的XCode版本?你有没有检查你是否包括UIKit?我现在尝试了你的代码,没有任何生成问题(不需要额外的包含!)尝试进行常规清理:删除所有派生数据并重新启动xcode。你在.mm文件上尝试过吗?在.m文件中也同样适用于我