3
4

3 に答える 3

7
  boost::ptr_vector<S>::iterator it;

これはC++キーワードを使用する必要がありますtypename

typename boost::ptr_vector<S>::iterator it;

そうでなければ、C++は何であるかを知りませんptr_vector<S>::iterator。これは、の定義がptr_vector<S>テンプレートパラメータに依存し、Sの値がSテンプレートの定義時に不明であるためです。ptr_vector<S>::iteratorただし、コンパイラは、正確に何であるかを知らなくても、行を理解できる必要がありますS

したがって、コンパイラは、依存名が変数であると想定します(したがって、の静的メンバーptr_vector<S>)。typename依存する名前が変数ではなく型であることをコンパイラーに通知するために使用する必要があります。

于 2011-07-14T07:13:35.243 に答える
4

タイプ名を追加する必要があると思います-必要だと思います:

typename boost::ptr_vector<S>::iterator it;

テンプレートを使用すると、次のようなエラーが発生します。

error: expected ';' before it;

これは、前の型がitコンパイラによって型として認識されていないため、を追加する必要があるためtypenameです。

于 2011-07-14T07:15:12.790 に答える
0

エラーメッセージIMOについては説明していませんが、投稿したコードでboost::ptr_vector<S>::iterator変数にboost::ptr_vector<P>::iterator値を割り当てています。

于 2011-07-14T07:14:10.713 に答える