繁体   English   中英

变量不是 class 的 static 成员

[英]Variable is not a static member of class

我正在研究 GameKitHelper class,它主要是用 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);
         }];
    }
}

我在这里得到的错误是:

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

这是一个 gcc 错误。 有关它的众多报告之一,请参阅Objective-C++ 块与 Objective-C 块

<soapbox>我建议尽可能避免使用 Objective-C++。 编译速度慢,运行臃肿(尤其是使用 ARC,因为它打开了-fobjc-arc-exceptions ),编译器和调试器中的错误,而且在我的经验中大部分都是一团糟,给出了两全其美的结果。 C++ 没问题。 Objective-C 没问题。 只要保持它们之间的接口尽可能小。 </肥皂盒>

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

以防它可以帮助别人......

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

我通过在父 function 中将我的变量声明为 shared_ptr 来解决这个问题...将我需要的实际 object 放在堆上。 在该块中,我通过 shared_ptr 变量访问 object。 这种安排导致 shared_ptr 被隐式复制到块中,而父 function 中的副本可以自由释放。 由于我没有在块中声明变量,因此我绕过了该错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM