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

发布于 2024-11-07 04:02:42 字数 782 浏览 6 评论 0原文

我编写了以下模板函数来对 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::size_type 无法解析到一个类型。我唯一的选择是回退到 std::size_t (如果我理解正确的话,它经常,但不总是std::vector::size_type),或者有解决方法吗?

I have written the following template function for summing the contents of a std::vector object. It is in a file by itself called 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;
}

When I try to compile this function, G++ spits out the following error:

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

As far as I can tell the reason that this error is returned is because std::vector<T>::size_type cannot be resolved to a type. Is my only option here to fall back to std::size_t (which if I understand correctly is often but not always the same as std::vector<T>::size_type), or is there a workaround?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北渚 2024-11-14 04:02:42

size_type是一个依赖名称,需要在其前面加上typename前缀,即:

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

size_type is a dependent name, you need to prefix it with typename, i.e.:

typename std::vector<T>::size_type i;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文