Подтвердить что ты не робот

"__weak typeof (self) weakSelf = self;" ожидается; в конце заявления

У меня есть два проекта, открытых в 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 *.

4b9b3361

Ответ 1

Используйте __typeof вместо typeof.

Это связано с тем, что оба __typeof и typeof являются расширениями для C, но typeof разрешен только в Clang, когда язык является GNUXX вариантом C, но не для CXX.

Ответ 2

У меня была аналогичная ошибка. @Leo Natan прав, и если вы хотите, вы можете изменить диалект C на GNU следующим образом:

В Навигаторе проектов перейдите в Project → Target → Build Settings

Посмотрите на C Language Dialect и измените его с c11 или c99 на GNU99, и он решит проблему. Теперь вы можете использовать typeof()

Надеюсь, это поможет:)