Objective c 变量不是类的静态成员 我正在研究GeMiKelSelp类,它主要是用C++编写的,但在一些地方也使用Objto-C,在.mm文件中。

Objective c 变量不是类的静态成员 我正在研究GeMiKelSelp类,它主要是用C++编写的,但在一些地方也使用Objto-C,在.mm文件中。,objective-c,ios,objective-c++,Objective C,Ios,Objective C++,我删除了一些功能以隔离错误: void GameKitHelper::PopulateFriendScores(DynArray<GameCenterScore> *FriendScores) { GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init]; if (leaderboardRequest != nil) { leaderboardRequest.playerS

我删除了一些功能以隔离错误:

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);
         }];
    }
}
这是一个gcc错误。有关它的许多报告之一,请参阅

我建议尽量避免使用Objective-C++。编译速度很慢,运行起来很臃肿(特别是在ARC打开后),编译器和调试器中有错误,而且在我的经验中,大部分都是一团糟,这两种情况都很糟糕。C++是很好的。Objective-C很好。只要保持它们之间的接口尽可能小


但是切换到Clang2.0可能会解决这个特定的问题。

以防它可能会帮助其他人

我的项目需要使用10.6 SDK和LLVM gcc 4.2。我不能要求代码编译时发出叮当声

我通过在父函数中将变量声明为共享的ptr来解决这个问题。。。将我需要的实际对象放在堆上。在块中,我通过shared_ptr变量访问对象。这种安排导致共享的ptr隐式复制到块中,而父函数中的副本可以自由释放。因为我没有在块中声明变量,所以我绕过了这个bug


如果代码是基于clang或其他编译器构建的,我使用预处理器检查来使用普通堆栈变量。

这就是正确的代码吗?错误消息指的是哪一行?它指的是“int i=0;”第行,这也会导致下一行处理未定义“i”的另一个错误,尽管不是很相关。是的,这是确切的代码,减去我在测试这个产生问题的更简单方法时注释掉的旧代码。我看到很多例子都在做同样的事情,所以我想问题可能更多的不是我在给定代码中做错了什么,而是这个问题如何发生的任何想法。谢谢,切换到LLVM2.0成功了。谢谢你的建议。
'int GameKitHelper::i' is not a static member of 'class GameKitHelper'