类型和从属名称

dee*_*iip 5 c++ templates types

手动我可以创建一个std::vector<int>::iterator像这样的对象:

std::vector<int>::iterator i;
Run Code Online (Sandbox Code Playgroud)

所以这std::vector<int>::iterator是一种类型.但是当我写一个函数时:

template <class T>
std::vector<T>::iterator foo(std::vector<int>::iterator i)
{
    return i;
}
Run Code Online (Sandbox Code Playgroud)

编译器显示警告:

std::vector<T>::iterator' : is a dependent name  not a type
Run Code Online (Sandbox Code Playgroud)

并且代码不会编译.但是如果在main中我调用这样的函数:

int main()
{
    vector<int> v;
    foo(v.begin());
}
Run Code Online (Sandbox Code Playgroud)

T应该解析该参数.那为什么编译器显示错误?

Bir*_*rah 2

你必须在它前面加上 Typename 前缀,它 std::vector<T>::iterator依赖于模板参数,即T。因此,你应该在它前面加上 typename 前缀: 尝试使用:

typename std::vector<T>::iterator
Run Code Online (Sandbox Code Playgroud)

您可以参考此: http: //pages.cs.wisc.edu/~driscoll/typename.html