1

私は次の機能を持っていますが、以前は正常に機能していましたが、何をしたのかわかりません。奇妙なエラーが発生し始めました

コンテナはポインタのベクトルです

template<typename Container>
void delete_collections(Container& c) 
{ 
    while(!c.empty()) 
    {
        delete c.back(); //<=== here
        c.back() = NULL;
        c.pop_back();    //<=== & here
    }
}

最初のエラー

* *この行に複数のマーカー

  • (宣言されていない識別子はそれぞれ
  • `back' 未宣言 (最初にこれを使用)

2番目のエラー

  • `pop_back' が宣言されていない (最初の使用

解決策 一度間違って関数にマップを渡しましたが、コンパイラが警告を出してくれたらいいのにと思います。

4

1 に答える 1

2

記録のために、代わりに特別なコンテナーを使用します。たとえば、Boost を見てください。deleteまたは、手動で呼び出す必要のない場所にスマート ポインターを格納します。それでも、マップを除くすべてのコンテナで機能する方法でそれを行う方法は次のとおりです。

template<typename container>
void delete_all(container& c) {
    for(typename container::const_iterator it=c.begin(), end=c.end(); it!=end; ++it)
        delete *it;
    c.clear();
}

C++11 ではauto、 の代わりに も使用できますtypename container::const_iterator

于 2013-07-19T19:30:58.710 に答える