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 に答える