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() );

4

1 に答える 1

2

私は何をすることができますか/私はおそらく間違っているのですか?

エラーの原因となるコードを投稿していません。つまり、何が問題なのかを推測することしかできません。

ほとんどの場合、一時オブジェクト(関数呼び出しまたは他の式の結果)を関数に渡そうとしています。この関数は、一時的なものにバインドできない非定数左辺値参照を取ります。

ソリューション:

  • constを参照するように関数を変更しますreceiveMessage(Message const &)。これは、関数が変更する必要がない場合の唯一のオプションです。
  • 一時オブジェクトではなく、名前付き変数を渡します。
于 2012-12-19T17:28:44.333 に答える