Rumah  >  Soal Jawab  >  teks badan

Paparkan elemen dalam vektor menggunakan fungsi templat dan iterator

#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~~

女神的闺蜜爱上我女神的闺蜜爱上我2697 hari yang lalu1038

membalas semua(2)saya akan balas

  • 巴扎黑

    巴扎黑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. . .

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新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;
    }

    balas
    0
  • Batalbalas