5

次のコンパイル エラーが発生します。

error: expected `;' before 'it'"

これが私のコードです:

#include <boost/function.hpp>
#include <list>

template< class T >
void example() {
    std::list< boost::function<T ()> >::iterator it;
}

なぜこれが起こるのですか?どうすれば修正できますか?

4

1 に答える 1

18

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も参照してください。

于 2008-11-11T11:32:08.123 に答える