为什么GCC不允许我将模板参数用于另一个模板的参数?

时间:2011-05-11 23:09:21

标签: c++ templates stl g++ function-templates

我编写了以下模板函数来汇总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相同),或者有解决方法吗?

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

size_type是一个从属名称,您需要在其前面添加typename,即:

typename std::vector<T>::size_type i;