#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
template<typename T>
void factorial(vector<T> ivec, vector<T>::iterator iter) {
while (iter != ivec.end()) {
cout << *iter << endl;
++iter;
}
}
int main() {
vector<int> ivec = { 1,2,3,4,5,6,7 };
factorial(ivec, ivec.begin());
return 0;
}
在VS 2017中他的報錯訊息如下:
警告 C4346 “std::vector<T,std::allocator<_Ty>>::iterator”: 依赖名称不是类型 practice_needForCpp11 d:\practice_needforcpp11\practice_needforcpp11\源.cpp 8
错误 C2061 语法错误: 标识符“iterator” practice_needForCpp11 d:\practice_needforcpp11\practice_needforcpp11\源.cpp 8
错误 C2672 “factorial”: 未找到匹配的重载函数 practice_needForCpp11 d:\practice_needforcpp11\practice_needforcpp11\源.cpp 18
错误 C2780 “void factorial(std::vector<T,std::allocator<_Ty>>)”: 应输入 1 个参数,却提供了 2 个 practice_needForCpp11 d:\practice_needforcpp11\practice_needforcpp11\源.cpp 18
請教各位一下這裡出了什麼問題~謝謝了~~
巴扎黑2017-06-23 09:16:59
改動兩個位置,
改動前:void factorial(vector
改動後:void factorial(vector
先說第二個改動位置,typename是幹嘛的?參考http://blog.csdn.net/laojiu_/...
第一個改動位置,我也說不清,不加引用的話,在跟end()比較的時候vs報錯類型不匹配,這個我也沒搞清楚。 。 。
曾经蜡笔没有小新2017-06-23 09:16:59
在Vs2008上運行,會報錯。
錯誤的原因有:
(1)vector
vector<int> ivec;
for(int i=1;i<8;i++){
ivec.push_back(i);
}
(2)函數寫的很不好,直接用這樣寫就行了,根本沒必要傳ivec.begin()給函數。因為你已經傳了ivec給函數,函數就會得到ivec的所有訊息,不必畫蛇添足。
#include "iostream"
#include <vector>
using namespace std;
void factorial(vector<int> ivec) {
vector<int>::iterator it;
for(it=ivec.begin();it!=ivec.end();it++)
cout<<*it<<endl;
}
int main()
{
vector<int> ivec;
for(int i=1;i<8;i++){
ivec.push_back(i);
}
factorial(ivec);
return 0;
}