2012-12-19 145 views
0

我有Messageable::receiveMessage(Message&)。當我使用它,我希望能夠傳遞一個Message,我通過它從一個函數返回一個Message,但是當我做,我得到函數參考參數不起作用從其他函數返回的值

error: no matching function for call to 'Messageable::receiveMessage(Message)' 
no known conversion for argument 1 from 'Message' to 'Message&' 

它只能當我用我的重載< <(因爲它返回一個消息&,即:receiveMessage(myMsg<<value);

我可能是什麼/我我可能做錯了,或者是它只是沒有在標準中允許從函數返回的值?我認爲,當你聲明一個引用參數時,你可以使用這個對象本身並自動進行轉換(只有區別,它不會被複制),而且我看不出它是否來自函數。

(我知道這個問題很可能回答過了,但我只搜索想出了一個鏈接錯誤「未定義參考」)

有過錯的代碼爲receiveMessage(action->second->message());

回答

2

我該怎麼辦是/我可能做錯了嗎?

你不張貼導致錯誤,這意味着我們只能猜測什麼是錯的代碼。

很可能,您正試圖將函數調用或其他表達式的臨時對象傳遞給該函數。該函數採用非const 左值引用,該引用不能綁定到臨時表。

解決方案:

  • 改變功能採取的引用爲const:receiveMessage(Message const &)。如果函數不需要改變它,這只是一個選項。
  • 傳遞一個命名變量而不是臨時對象。
+0

是的......正是這樣:一個臨時對象。 – efaj