c++ - 带有局部变量声明的 dispatch_apply 不能在 C++ 方法实现中编译

标签 c++ objective-c ios grand-central-dispatch

代码

class XXX
{
   vector<Record> getAll()
   {
      dispatch_apply(3, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) {
        for (int j = 0; j < ...; ++j)
        { ... }
      });
    }
}

不编译,说“‘int XXX::j’不是‘class’的静态成员”。 doc on blocks说“在 block 的词法范围内声明的局部变量,其行为与函数中的局部变量完全相同。”该文件具有 .mm 扩展名。我错过了什么?

最佳答案

你的代码是正确的,clang 会编译它。一般来说,clang 的 C++ block 支持比 gcc 好很多,如果可以的话,你想使用它。如果你需要使用 gcc 有一个解决方法,使用::j 来引用 j。然而,这是非法的 C++ 并且 clang 会阻塞它,因此您可能希望以涉及的编译器为条件...

关于c++ - 带有局部变量声明的 dispatch_apply 不能在 C++ 方法实现中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620773/

相关文章:

c++ - 从基于 c++0x std::thread 的 C++ 库中公开完整的(C 语言)pthread 接口(interface)

objective-c - 静态/类方法存储在 objective-c 中的位置

objective-c - 是否可以获取 UIButton 的当前背景颜色?

ios - swift 'Could not build Obj-C module ' 分支邀请'

ios - 核心情节: Align both y-axes to have the same zero-point

ios - iOS 控制中心是否调用任何 UIApplication 方法。?

c++ - 返回原始值的快速排序实现

C++ 用迭代器初始化 vector

c++ - 通过引用传递原始类型会适得其反吗?

iphone - 一个 View 中有多个 PickerView?