【问题标题】:Objective-C++ block vs Objective-C blockObjective-C++ 块与 Objective-C 块
【发布时间】:2011-06-30 06:10:37
【问题描述】:

在 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++ 中我有:

测试.h:

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

测试.mm:

#include "Test.h"

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

我收到以下错误:

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

如果我删除int n;,则没有错误。在这种情况下,如何在块内定义n

【问题讨论】:

    标签: objective-c++ objective-c-blocks


    【解决方案1】:

    这是a GCC bug filed under radar #8953986。您可以使用 Clang/LLVM 2.0+ 按原样编译代码,或者将块变量放入全局名称空间(即int ::n)并使用 GCC。请注意,在这种情况下使用全局名称空间是无效的 C++ 并且 Clang/LLVM 2.0+ 不会编译它。

    【讨论】:

    • 切换到 LLVM 编译器似乎可以解决问题。干杯!
    【解决方案2】:

    您可以在类定义中添加:

    私人的: 静态整数 n;

    【讨论】:

    • 嗯。我想如果我必须这样做,我可以做到。但是,我正在寻找一种方法来定义一个范围为块的变量。这不可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多