Objective-C++块与Objective-C块

pto*_*son 4 objective-c++ objective-c-blocks

在Objective-C中我有有效的代码:

TestTwo.h:

@interface TestTwo : NSObject
-(void)test;
@end
Run Code Online (Sandbox Code Playgroud)

TestTwo.m:

@implementation TestTwo
-(void)test
{
    void (^d_block)(void) = 
    ^{
        int n;
    };
}
@end
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一个Objective-C++类,它定义了一个类似的方法test.这是简化,但说明了意图.所以,在Objective-C++中,我有:

Test.h:

class Test
{
public:
    void TestIt();
};
Run Code Online (Sandbox Code Playgroud)

Test.mm:

#include "Test.h"

void Test::TestIt()
{
    void (^d_block)(void) = 
    ^{
        int n;
    };
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误:'int Test :: n'不是'class Test'的静态成员.

如果我删除int n;没有错误.如何n在此上下文中的块中定义?

小智 6

这是在雷达#8953986下提交的GCC错误.您可以使用Clang/LLVM 2.0+按原样编译代码,也可以将块变量放在全局名称空间(即int ::n)中并使用GCC.请注意,在这种情况下使用全局名称空间无效C++和Clang/LLVM 2.0+将无法编译它.