2011-06-29 54 views
4

在Objective-C我有合法的代碼:的Objective-C++塊VS Objective-C的塊

TestTwo.h:

@interface TestTwo : NSObject 
-(void)test; 
@end 

TestTwo.m:

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

我真正想要的是定義類似於test的方法的Objective-C++類。這是簡化,但說明了意圖。因此,在Objective-C++,我有:

Test.h:

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

Test.mm:

#include "Test.h" 

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

我得到以下錯誤:

error: 'int Test::n' is not a static member of 'class Test'.

如果我刪除int n;沒有錯誤。如何在此上下文中定義n

回答

6

這是a GCC bug filed under radar #8953986。您可以使用Clang/LLVM 2.0+按原樣編譯您的代碼,也可以將塊變量放在全局名稱空間(即int ::n)中並使用GCC。請注意,在這種情況下使用全局名稱空間是無效的C++和Clang/LLVM 2.0+將不會編譯它。

+0

切換到LLVM編譯器似乎有訣竅。乾杯! – ptoinson

0

在類的定義,你可以添加:

 
private: 
static int n; 
+0

嗯。我想,如果我必須我可以做到這一點。但是,我正在尋找一種方法來定義一個變量的範圍。這不可能嗎? – ptoinson