Переменная не является статическим членом класса
Я работаю над классом 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);
}];
}
}
Ошибка, которую я получаю здесь:
'int GameKitHelper::i' is not a static member of 'class GameKitHelper'
2 ответа:
Это ошибка gcc. Смотрите Objective-C++ block vs Objective-C block для одного из многих отчетов об этом.
я рекомендую избегать Objective-C++, насколько это возможно. Он медленно компилируется, раздувается для запуска (особенно с ARC, так как он включает -fobjc-Arc-exceptions), глючит в компиляторе и отладчике, и в основном беспорядок в моем опыте, давая худшее из обоих миров. C++ - это нормально. Цель-С в порядке. Просто держите интерфейс между ними таким маленьким, как возможный. Но переход на clang 2.0 может решить эту конкретную проблему.
На случай, если это поможет кому-то еще...
В соответствии с потребностями моего проекта я должен использовать SDK 10.6 и LLVM-gcc 4.2. Я не могу требовать clang для компиляции кода.
Я решил эту проблему, объявив переменную shared_ptr в родительской функции... кладу нужный мне предмет в кучу. В блоке я получаю доступ к объекту через переменную shared_ptr. Это расположение приводит к тому, что shared_ptr неявно копируется в блок, в то время как копия в родительская функция может быть освобождена. Поскольку я не объявляю переменную в блоке, я обхожу ошибку.
Я использовал проверку препроцессора для использования обычной переменной стека, если код строится на clang или каком-либо другом компиляторе.