学习C++时,遇到如下错误:
need 'typename' before 'std::vector<elemType>::iterator' because
'std::vector<elemType>' is a dependent scope
开始还以为是自己的代码有问题,后面发现《Essential C++》一书中第74页也是这样写的,便深感奇怪,但也寻得几种解决办法,如有遇到类似问题的,可以参见一二。
以如下代码作为示例:
template<typename _T>
_T maxnum(vector<_T> tarr) {
_T maxres = tarr[0];
vector<_T>::iterator it = tarr.begin();
for (; it != tarr.end(); it++) {
maxres = *it > maxres ? *it : maxres;
}
return maxres;
}
解法一:
不采用迭代器,改用遍历操作
template<typename _T>
_T maxnum(vector<_T> tarr) {
_T maxres = tarr[0];
for (int i = 0; i < tarr.size(); ++i) {
maxres = tarr[i] > maxres ? tarr[i] : maxres;
}
return maxres;
}
解法二:
将变量设为auto类型,让编译器自己推断变量类型
template<typename _T>
_T maxnum(vector<_T> tarr) {
_T maxres = tarr[0];
auto it = tarr.begin();
for (; it != tarr.end(); it++) {
maxres = *it > maxres ? *it : maxres;
}
return maxres;
}
解法三:
在出错的代码前添加typename关键字
template<typename _T>
_T maxnum(vector<_T> tarr) {
_T maxres = tarr[0];
typename vector<_T>::iterator it = tarr.begin();
for (; it != tarr.end(); it++) {
maxres = *it > maxres ? *it : maxres;
}
return maxres;
}
网友评论