2017-05-21 18 views
0

私はクラスプロジェクトに取り組んでいます。そのためには、vectorから派生したテンプレートクラスを作成し、そこから要素を追加したり削除したりする必要があります。C++テンプレートクラスのイテレータを作成できますか?

私は、これがベクトルであるためクラスのイテレータを作っていると思っていましたが、 "this"を使用してイテレータを作成するだけで、 "this"はポインタであるため動作しませんでした。

私はこれを試してみると:vector<T>::iterator p;私は多くのエラーが発生するので、これを行うことも、別の解決策を見つける必要がありますか?

+0

仮想デストラクタを持たないため、 'std :: vector'から継承しないでください。 –

答えて

0

まず、仮想デストラクタがないため、std::vectorから継承しないでください。詳細はThou shalt not inherit from std::vectorをご覧ください。

std::vectoriteratorを使用する場合は、usingディレクティブでクラスのスコープにインポートする必要があります。

#include <vector> 

template < typename T > 
class MyVector : std::vector<T> 
{ 
public: 
    using typename std::vector<T>::iterator; 
}; 

int main() 
{ 
    MyVector<double>::iterator p; 
} 
+1

"あなたはstd :: vectorから継承しません"というステートメント "実際には、std :: vectorの公開継承に問題はありません。"あまり良い例ではありません;) – Logman

関連する問題