error: need ‘typename’ before ‘T:: iterator’ because ‘T’ is a dependent scope for(T::iterator it = v.begin();it != v.rend();++it) ^ vfun.cpp:16:18: error: expected ‘;’ before ‘it’ for(T::iterator it = v.begin();it != v.rend();++it) ^~ vfun.cpp:16:33: error: ‘it’ was not declared in this scope for(T::iterator it = v.begin();it != v.rend();++it) ^~ vfun.cpp:16:33: note: suggested alternative: ‘int’ for(T::iterator it = v.begin();it != v.rend();++it) ^~ int vfun.cpp: In instantiation of ‘void show(T) [with T = std::vector<int>]’: vfun.cpp:23:9: required from here vfun.cpp:16:32: error: dependent-name ‘T:: iterator’ is parsed as a non-type, but instantiation yields a type for(T::iterator it = v.begin();it != v.rend();++it)
时间: 2023-12-18 13:02:34 浏览: 293
这个错误是因为在模板函数内部使用了依赖名称,编译器无法确定 T::iterator 是类型还是成员变量,需要使用 typename 来明确告诉编译器 T::iterator 是一个类型,例如:
```
for(typename T::iterator it = v.begin(); it != v.end(); ++it)
```
在迭代器前加上 typename 关键字即可。
相关问题
error: need 'typename' before 'QMap<QString, T>::iterator' because 'QMap<QString, T>' is a dependent scope
这个错误通常出现在模板类或者嵌套类中。在这种情况下,编译器无法确定QMap<QString, T>::iterator是一个类型还是一个成员变量。为了解决这个问题,需要使用typename关键字告诉编译器QMap<QString, T>::iterator是一个类型。你需要将代码修改为:
```
typename QMap<QString, T>::iterator prevIter;
```
这样编译器就能正确地解析QMap<QString, T>::iterator了。
using SetTypeIterator = std::set<order::Order*, Compare>::iterator; /home/xuguanglong/data/ai-simulating-exchange/SHSE/server/helpers/helpers.h:110: error: need ‘typename’ before ‘std::set<exchange::order::orderstr*, Compare>::iterator’ because ‘std::set<exchange::order::orderstr*, Compare>’ is a dependent scope 110 | using SetTypeIterator = std::set<order::Order*, Compare>::iterator; | ^~~ | typename
这个错误是因为使用了一个依赖作用域的类型名字,需要在类型名前加上 `typename`。正确的代码应该是这样的:
```
using SetTypeIterator = typename std::set<order::Order*, Compare>::iterator;
```
在一个依赖作用域中使用一个类型名时,编译器会认为它是一个变量或静态成员,因此需要使用 `typename` 来明确指出这个名字是一个类型。
阅读全文