Objective-C++块与Objective-C块的区别

4
在Objective-C中,我有一个有效的代码:
TestTwo.h:
@interface TestTwo : NSObject
-(void)test;
@end

TestTwo.m:

@implementation TestTwo
-(void)test
{
    void (^d_block)(void) = 
    ^{
        int n;
    };
}
@end

我希望有一个Objective-C++类,定义了一个类似于test的方法。这只是一个简化的例子,但说明了意图。所以,在Objective-C++中,我有:

Test.h:

class Test
{
public:
    void TestIt();
};

Test.mm:

#include "Test.h"

void Test::TestIt()
{
    void (^d_block)(void) = 
    ^{
        int n;
    };
}

我遇到了以下错误:
引用: 错误:'int Test::n'不是'class Test'的静态成员。
如果我移除'int n;',就不会出现这个错误。在这种情况下,我该如何在块内定义'n'?
2个回答

6

这是radar #8953986下的GCC错误。您可以使用Clang / LLVM 2.0+编译您的代码,或将您的块变量放在全局命名空间中(即int ::n)并使用GCC。请注意,在这种情况下使用全局命名空间不是有效的C ++语法,而且Clang / LLVM 2.0+无法编译它。


切换到LLVM编译器似乎解决了问题。干杯! - ptoinson

0

在类定义中,您可以添加:

private:
static int n;

嗯,我想如果必须的话我可以这样做。但是,我正在寻找一种定义变量作用域限定在块级别的方法。这不可能吗? - ptoinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接