Rumah > Soal Jawab > teks badan
#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;
}
Mesej ralatnya dalam VS 2017 adalah seperti berikut:
警告 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
Sila beritahu saya apa yang salah di sini~Terima kasih~~
巴扎黑2017-06-23 09:16:59
Tukar dua kedudukan,
Sebelum perubahan: void factorial(vector<T> ivec, vector<T>::iterator iter)
Selepas perubahan: void factorial(vector<T> & ivec, typename vector<T>::iterator iter)
Mari kita bincangkan tentang kedudukan perubahan kedua terlebih dahulu. Rujukan http://blog.csdn.net/laojiu_/...
Saya tidak dapat menerangkan lokasi perubahan pertama Jika ia tidak dipetik, VS akan melaporkan ketidakpadanan jenis apabila membandingkan dengan end() saya juga tidak faham. . .
曾经蜡笔没有小新2017-06-23 09:16:59
Apabila berjalan pada Vs2008, ralat akan dilaporkan.
Sebab ralat adalah:
(1) vector<int> ivec = {1,2,3,4,5,6,7}; Anda boleh menggantikannya dengan ini
vector<int> ivec;
for(int i=1;i<8;i++){
ivec.push_back(i);
}
(2) Fungsi ini tidak ditulis dengan baik. Tulis sahaja seperti ini. Tidak perlu menghantar ivec.begin() ke fungsi tersebut. Oleh kerana anda telah menghantar ivec kepada fungsi tersebut, fungsi tersebut akan mendapat semua maklumat ivec tanpa menambah sebarang maklumat tambahan.
#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;
}