变量不是类的静态成员

Joh*_*ohn 2 objective-c objective-c++ ios

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

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

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);
         }];
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

'int GameKitHelper::i' is not a static member of 'class GameKitHelper'
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 5

这是一个gcc bug.有关它的许多报告之一,请参阅Objective-C++块与Objective-C块.

<soapbox>我建议尽可能避免使用Objective-C++.编译速度慢,运行起来很臃肿(尤其是ARC,因为它打开了-fobjc-arc-exceptions),编译器和调试器中的错误,以及我给两个世界中最糟糕的经历带来的麻烦.C++很好.Objective-C很好.只需保持它们之间的接口尽可能小.</肥皂盒>

但切换到clang 2.0可能会解决这个具体问题.