variables不是类的静态成员

我正在开发一个GameKitHelper类,它主要是用C ++编写的,但在某些地方还有Objective-C,在.mm文件中。

我删除了一些function来隔离错误:

void GameKitHelper::PopulateFriendScores(DynArray<GameCenterScore> *FriendScores) { GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init]; if (leaderboardRequest != nil) { leaderboardRequest.playerScope = GKLeaderboardPlayerScopeFriendsOnly; leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime; leaderboardRequest.range = NSMakeRange(1,25); [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) { int i = 0; printf("%d", i); }]; } } 

我在这里得到的错误是:

 'int GameKitHelper::i' is not a static member of 'class GameKitHelper' 

这是一个gcc的错误。 请参阅Objective-C ++块与Objective-C块,了解其中的一个报告。

<soapbox>我build议尽可能避免使用Objective-C ++。 编译起来很慢,运行起来很臃肿(特别是在ARC打开-fobjc-arc-exceptions之后 ),编译器和debugging器中的错误,而且在我的经验中,这两个世界都是最糟糕的。 C ++很好。 Objective-C很好。 只要保持它们之间的接口尽可能小。 </肥皂盒>

但切换到铛2.0可能会解决这个特定的问题。

万一它可能帮助别人…

我需要我的项目需要使用10.6 SDK和LLVM-gcc 4.2。 我不能要求clang来编译代码。

我解决了这个问题,通过在父函数中声明我的variables为shared_ptr …把​​我需要的实际对象放在堆上。 在块中,我通过shared_ptrvariables访问对象。 这种安排使得shared_ptr被隐式地复制到块中,而父函数中的副本可以被释放。 由于我没有在块中声明一个variables,我绕过了这个错误。

我使用预处理器检查来使用正常的堆栈variables,如果代码是build立在叮当声或其他编译器。