簡體   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