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文件中也同样适用于我