0

これは一時オブジェクトと呼ばれると思います。これが私のシナリオです:

私はいくつかの機能を持っています:

void List<T>::Remove(ListIterator &)
ListIterator List<T>::Begin() //returns an iterator pointing to the first node in the list.

G ++で次のようなことをしようとすると:

mylist.Remove(mylist.Begin())

次のエラーが表示されます。

Remove(ListIterator) の呼び出しに一致する関数がありません。

ListIterator を値で受け取る関数はありませんし、必要もありません。しかし、私がやろうとしていることさえ意味があるかどうかはわかりません。コードは Windows VS2012 では機能しますが、g++ では機能しません。

私の実装を修正する方法またはこの動作の説明についてのアドバイスは大歓迎です!

4

2 に答える 2

1

の結果はmylist.Begin()一時的なものです ( mylist.Begin()参照を返さない限り)。非 const 参照を初期化するためにテンポラリを使用することはできません。結果を変数に割り当てて に渡すかRemove、参照を const にするか、値渡しを使用します。

VS2012 がそれをコンパイルする理由について: VS2012 は準拠していません。

于 2013-07-11T16:18:47.317 に答える
0

クリス、エラーコンパイラが(最初のメッセージで)「Remove(ListIterator)の呼び出しに一致する関数がありません」と表示した場合、コンパイラはListIteratorがパラメータとしてRemoveに渡されると述べていますが、ListIterator&を期待しているため、funcを変更して解決します宣言 ListIterator& を返すように開始するか、Kris が提案したように、関数宣言を削除して const ListIterator & をパラメーターとして受け取るように変更します。両方のオプションが機能することを願っています。

于 2013-07-11T17:16:09.077 に答える