次のコンパイル エラーが発生します。
error: expected `;' before 'it'"
これが私のコードです:
#include <boost/function.hpp>
#include <list>
template< class T >
void example() {
std::list< boost::function<T ()> >::iterator it;
}
なぜこれが起こるのですか?どうすれば修正できますか?
typename
::iterator を実行する型はテンプレート パラメーター T に依存するため、その行の前に配置する必要があります。次のようにします。
template< class T >
void example() {
typename std::list< boost::function<T ()> >::iterator it;
}
ラインを検討してください
std::list< boost::function<T ()> >::iterator * it;
これは、乗算またはポインターを意味する可能性があります。だからこそtypename
、自分の意思を明確にする必要があります。それがないと、コンパイラは型を想定しないため、そこに演算子または構文上のセミコロンが必要です。
また、新しい C++ FAQ エントリWhere to put template and typename ondependent namesも参照してください。