我编写了以下模板函数来汇总std :: vector对象的内容。它本身就是一个名为sum.cpp的文件。
#include <vector>
template<typename T>
T sum(const std::vector<T>* objs) {
T total;
std::vector<T>::size_type i;
for(i = 0; i < objs->size(); i++) {
total += (*objs)[i];
}
return total;
}
当我尝试编译此函数时,G ++会发出以下错误:
sum.cpp: In function ‘T sum(const std::vector<T, std::allocator<_Tp1> >*)’:
sum.cpp:6: error: expected ‘;’ before ‘i’
sum.cpp:7: error: ‘i’ was not declared in this scope
据我所知,返回此错误的原因是因为std::vector<T>::size_type
无法解析为某种类型。我的唯一选择是回到std::size_t
(如果我理解正确经常但总是与std::vector<T>::size_type
相同),或者有解决方法吗?
答案 0 :(得分:6)
typename std::vector<T>::size_type i;
http://womble.decadent.org.uk/c++/template-faq.html#disambiguation
答案 1 :(得分:3)
size_type是一个从属名称,您需要在其前面添加typename
,即:
typename std::vector<T>::size_type i;