template<class T>
void print_vector(const std::vector<T>& v)
{
for (std::vector<T>::const_iterator p = v.begin(); p != v.end(); ++p)
std::cout << *p << std::endl;
}
問題: 上に書いたコードを含むソースをコンパイルしたらエラーが出た。コンパイラにとって何かの情報が足りないようだ。どこが間違っているのだろうか?
答えは以下の通りで、「typenameが抜けている」。
template<class T> void print_vector(const std::vector<T>& v) { for (typename std::vector<T>::const_iterator p = v.begin(); p != v.end(); ++p) std::cout << *p << std::endl; }
コンパイラからはテンプレートパラメータTを含むstd::vector<T>::const_iteratorが型かどうか判断できないので、型であることを明示的に教える必要がある。
まあ、コンパイラによってはtypenameがなくても通っちゃったりするんだけどね。
問題: 上に書いたコードを含むソースをコンパイルしたらエラーが出た。コンパイラにとって何かの情報が足りないようだ。どこが間違っているのだろうか?
答えは以下の通りで、「typenameが抜けている」。
template<class T> void print_vector(const std::vector<T>& v) { for (typename std::vector<T>::const_iterator p = v.begin(); p != v.end(); ++p) std::cout << *p << std::endl; }
コンパイラからはテンプレートパラメータTを含むstd::vector<T>::const_iteratorが型かどうか判断できないので、型であることを明示的に教える必要がある。
まあ、コンパイラによってはtypenameがなくても通っちゃったりするんだけどね。
コメント