类型和从属名称[重复]

2024-03-26

我可以手动创建一个std::vector<int>::iterator对象如:

std::vector<int>::iterator i;

So here std::vector<int>::iterator是一种类型。但是当我写一个函数时:

template <class T>
std::vector<T>::iterator foo(std::vector<int>::iterator i)
{
    return i;
}

编译器显示警告:

std::vector<T>::iterator' : is a dependent name  not a type

并且代码无法编译。但如果在 main 中我这样调用该函数:

int main()
{
    vector<int> v;
    foo(v.begin());
}

参数T应该得到解决。那为什么编译器会显示错误呢?


以下链接有解决方案和答案,

“从属名称不是类型”,但前缀为“typename”会导致编译器崩溃 https://stackoverflow.com/questions/17684603/dependent-name-is-not-a-type-but-prefixing-with-typename-causes-compiler-cr

简而言之,“std::vector::iterator”是一个从属名称而不是类型名称。所以你不能直接使用作为类型名。您必须指定“typename std::vector::iterator”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型和从属名称[重复] 的相关文章

随机推荐