我在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 *
。
答案 0 :(得分:28)
使用__typeof
代替typeof
。
这是因为__typeof
和typeof
都是C的扩展名,但只有当语言是C的typeof
变体时才会在Clang中启用GNUXX
,但不是CXX
。
答案 1 :(得分:5)
我有类似的错误。 @Leo Natan是对的,如果你愿意,你可以将C语言改为GNU,如下所示:
在Project Navigator中转到Project - >目标 - >构建设置
寻找C语言方言并将其从c11或c99更改为GNU99,它将解决问题。现在你可以使用typeof()
我希望它有所帮助:)