でクラスメソッドにイテレータを渡すことはできません:は、私は、次の単純なクラスを持つC++
template <class T> class ListWrap
{
std::list<T> m_List;
explicit ListWrap(std::initializer_list<T> data)
{
Set(data);
}
void Set(std::initializer_list<T> data)
{
m_List.clear();
m_List.insert(m_List.end(), data);
}
};
これは正常に動作します、私は初期化子リストを使用して新しいオブジェクトListWrap
をインスタンス化することができます。今度は、別のリストまたはイテレータからm_List
を設定して、コピーコンストラクタのそれを使用することもできます。
だから私は、以下を追加しようとしました:
// copy constructor
explicit ListWrap(const ListWrap& Other)
{
Set(Other.m_List.begin());
}
void Set(std::iterator<std::list<T>, T> Iterator)
{
m_List.clear();
m_List.insert(m_List.end(), Iterator);
}
しかし、私がコンパイルしようとすると、今、私は次のエラーを取得する:
error C2664: cannot convert argument 1 from
'std::_List_const_iterator<std::_List_val<std::_List_simple_types<int>>>'
to 'std::initializer_list<_Ty>'*
このエラーメッセージがでSet()
への呼び出しを指し、新しいコピーコンストラクタだから、 "古い" Set()
メソッドをイテレータを受け取るSet()
の2番目の "新しい"バージョンではなく、イニシャライザリストで使用しようとしているようです。
私はここで何が不足していますか?
あなたが使用しようとしていますか? – alexolut
@alexolut私はあまり気にしません。リストのコンテンツを 'm_List'に挿入したいだけです。 – Matthias
コピーの目的のために、copy-ctorの中で 'm_List = Other.m_List;'を使うだけです。イテレーターでコピーしたい場合は、それらのペア(開始と終了)が必要です。 – alexolut