#include <iostream> #include <vector> using namespace std;
int sum(vector<int> vec){ int ammount = 0; for(vector<int>::iterator it = vec.begin();it != vec.end(); ++it){ ammount += *it; } return ammount; } // 2ch行数制限回避 int main() { vector<int> v; v.push_back(1);v.push_back(2);v.push_back(3); cout << sum << endl; // 表示結果: 6 } はいいんだけど、sumを template <class T, T zero> T sum(vector<T> vec) { T ammount = zero; for(vector<T>::iterator it = vec.begin();it != vec.end(); ++it){ ammount += *it; } return ammount; } にして、main中のcoutの行をcout << sum<int, 0>(v) << endl;にすると a.cpp:8: error: dependent-name ‘std::vector::iterator’ is parsed as a non-type, but instantiation yields a type a.cpp:8: note: say ‘typename std::vector::iterator’ if a type is meant のようになっちゃう。vector<T>::iterator itをT vector::iterator itに変えても a.cpp:9: error: ‘template<class _Tp, class _Alloc> class std::vector’ used without template parameters a.cpp:9: error: expected initializer before ‘it’ になっちゃう。 どう対処すればいいんでしょう?