[英]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.