Ответ 1
Используйте __typeof
вместо typeof
.
Это связано с тем, что оба __typeof
и typeof
являются расширениями для C, но typeof
разрешен только в Clang, когда язык является GNUXX
вариантом C, но не для CXX
.
У меня есть два проекта, открытых в Xcode 6.4. Оба используют следующее выражение:
- (void)startService
{
__weak typeof(self) weakSelf = self;
[self.messageOperationQueue addOperationWithBlock:^{
NSDictionary *storedMessages = [mySettings get:kStorageName withDefault:@{} storageType:kMySettingsStorageTypeDiskMapped];
[weakSelf.messages addEntriesFromDictionary:storedMessages];
}];
}
Однако в одном проекте ошибок нет, а в другом проекте я получаю ошибку компилятора:
Expected ';' at end of declaration
Он хочет, чтобы я поставил точку с запятой после __weak typeof (self). У меня есть подозрение, что я просто делаю что-то действительно немое, но мне трудно понять, что. Кроме того, я знаю, что я мог бы заменить typeof(self)
на myClass *
.
Используйте __typeof
вместо typeof
.
Это связано с тем, что оба __typeof
и typeof
являются расширениями для C, но typeof
разрешен только в Clang, когда язык является GNUXX
вариантом C, но не для CXX
.
У меня была аналогичная ошибка. @Leo Natan прав, и если вы хотите, вы можете изменить диалект C на GNU следующим образом:
В Навигаторе проектов перейдите в Project → Target → Build Settings
Посмотрите на C Language Dialect и измените его с c11 или c99 на GNU99, и он решит проблему. Теперь вы можете использовать typeof()
Надеюсь, это поможет:)