"__weak typeof(self)weakSelf = self;" 预期的 在宣言结束时

Ben*_*ynn 17 objective-c

我在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];
    }];
}
Run Code Online (Sandbox Code Playgroud)

但是,在一个项目中没有错误,在另一个项目中我收到编译器错误:

Expected ';' at end of declaration
Run Code Online (Sandbox Code Playgroud)

它希望我在__weak typeof(self)之后放置一个分号.我怀疑我只是在做一些非常愚蠢的事情,但我很难搞清楚什么.另外,我知道我可以代替typeof(self)使用myClass *.

Leo*_*ica 31

__typeof而不是typeof.

这是因为这两个__typeoftypeof是扩展C,但typeof仅在锵启用时,语言是一个GNUXX变种c,但不适合CXX.


Ric*_*jos 5

我有类似的错误.@Leo Natan是对的,如果你愿意,你可以将C语言改为GNU,如下所示:

在Project Navigator中,转到Project - > Target - > Build Settings

寻找C语言方言并将其从c11或c99更改为GNU99,它将解决问题.现在你可以使用typeof()

我希望它有帮助:)