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