2015-09-20 47 views
-1
#include<iostream> 
#include<list> 
#include<vector> 
template<typename Container> 
void remove(Container &list){ 
    typename Container::iterator iter; 
    iter = list.begin(); 

    while(iter != list.end()){ 
      iter = list.erase(iter); 
      if(iter ! = list.end()) 
        iter++; 
    } 
} 

int main(){ 
    std::list<int> chess; 
    std::vector<int> v; 
    for (int n=0; n<100; n++){ 
      chess.push_back(n); 
      v.push_back(n); 
    } 
    remove(chess); 
    remove(v); 
    std::cout<<chess.back()<<std::endl; 
    std::cout<<v.back()<<std::endl; 

    return 0; 
} 

[Error] expected')'before'!'令牌以下代碼有什麼問題?迭代器類型在模板函數中不起作用?

[錯誤]無法轉換 'ITER' 從 '的std ::目錄::迭代器{又名性病:: _ List_iterator}' 到 '布爾'

[錯誤]無法轉換 'ITER' 從「的std ::向量:迭代{又名__gnu_cxx :: __ normal_iterator>}」到 '布爾'

回答

1
 if(iter ! = list.end()) 

應該是

 if(iter != list.end()) // No space between ! and = 
+0

先到先得。 –

1
if(iter ! = list.end()) 

應該

if(iter != list.end()) 

注意,在你的代碼!=之間的額外空間。

我對未來的建議:按照它們出現的順序處理編譯器錯誤。通常,修復第一個錯誤會使其他錯誤消失。