2012-06-13 64 views
4

我認爲'右值'只是返回值的簡寫。 初始化返回對象是什麼意思?這是我的主要問題。其餘的是我的特定情況的背景,但我對一般答案很感興趣。「無法用類型BAR的右值初始化類型爲FOO的返回對象」是什麼意思?

我在看別人的代碼:

return [p_facebook.facebook handleOpenURL:url]; 

從理論上講,這是呼喚:

- (BOOL)handleOpenURL:(NSURL *)url; 

我看到:Cannot initialize return object of type 'BOOL' (aka 'signed char') with an rvalue of type 'id'。我猜這個類別可能是在其他地方定義的,我有一個路徑問題...

+0

有沒有關於「可能不會執行handleOpenURL:」的警告? –

+0

沒有。令人遺憾的是,由於合法而非語法優勢的構造,此代碼會生成比Xcode想要顯示的警告更多的警告。 –

+1

我解決了我的編譯問題,在頭部搜索路徑中搜索較早的.h,這個路徑優先於我的項目。 –

回答

6

在這種情況下,rvalue不是「返回值」,而是(大致)「右手價值」的簡寫或出現在作業或語句右側的對象。我認爲你可能在執行-handleOpenURL:時發現它在某個時候返回了一個類型爲id的對象,這顯然與聲明的BOOL返回類型不兼容。如果您有權訪問-handleOpenURL:的來源,我建議首先在那裏檢查錯誤的退貨。

+0

這裏是什麼被「初始化」?也許我不明白這個詞。看起來像一個非法的「任務」。我也認爲這是一個運行時異常,因爲方法的簽名很乾淨。我的懷疑是,這個類可能有一個重複的地方返回一個ID。做一些搜索。我能看到的最明顯的副本只是返回合法的BOOL。 –

+0

如果你忽略單詞「initialize」,這個錯誤對我更有意義 - 不能用'id'類型的右值返回'BOOL'類型的對象(aka'signed char') - 雖然現在我明白了我可以看到他們擁有它的方式。 –

相關問題