搜尋

首頁  >  問答  >  主體

c++ - 使用模板函數和迭代器顯示vector中的元素

#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    

請教各位一下這裡出了什麼問題~謝謝了~~

女神的闺蜜爱上我女神的闺蜜爱上我2737 天前1081

全部回覆(2)我來回復

  • 巴扎黑

    巴扎黑2017-06-23 09:16:59

    改動兩個位置,

    改動前:void factorial(vector ivec, vector::iterator iter)
    改動後:void factorial(vector & ivec, typename vector::iterator iter)

    先說第二個改動位置,typename是幹嘛的?參考http://blog.csdn.net/laojiu_/...

    第一個改動位置,我也說不清,不加引用的話,在跟end()比較的時候vs報錯類型不匹配,這個我也沒搞清楚。 。 。

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-23 09:16:59

    在Vs2008上運行,會報錯。
    錯誤的原因有:
    (1)vector ivec = { 1,2,3,4,5,6,7 }; 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;
    }

    回覆
    0
  • 取消回覆