2012-05-04 38 views
4

我在啓用了ARC的Objective-C項目中包含了庫的頭文件。在啓用ARC的情況下使用reinterpret_cast

我知道庫不編譯啓用ARC,但問題是庫的頭文件,特別是這些行:

template <typename Type_> 
static inline Type_ &MSHookIvar(id self, const char *name) { 
    Ivar ivar(class_getInstanceVariable(object_getClass(self), name)); 
    void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>(self) + ivar_getOffset(ivar)); 
    return *reinterpret_cast<Type_ *>(pointer); 
} 

我得到這個錯誤:

Cast of an Objective-C pointer to 'char *' is disallowed with ARC 

是有可能解決這個錯誤?

整個頭文件可以在這裏找到:http://puu.sh/sTrH

+0

這是不可能投objc變種類型和C類型的變種。 – Feo

+0

嘗試使用'void * self'。 – Feo

+0

你設法解決它嗎? – Osa

回答

5

您需要的pointer初始化改成這樣:

void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>((__bridge void *)self) + ivar_getOffset(ivar)); 
+0

爲什麼非蘋果頭文件總是需要修改? –

-1

轉到你的項目目標,並選擇構建階段選項卡。打開「編譯源」部分並找到該頭文件。將編譯器標誌「-fno-objc-arc」減去引號。這將導致該文件被定期編譯,並應該解決您的問題,假設代碼在非弧環境中工作。

+0

頭文件未編譯 – Tyilo

相關問題