2013-10-20 59 views
0
struct user 
{ 
    vector<size_t> follower; 
    vector<size_t> following; 
}; 

int main() 
{ 
    vector<user> node (100); 

    // Pushing back some indices of other nodes in some node[x].follower and node[x].following 

    size_t i = 2; 

    for (size_t const& j : node[i].follower) 
     node[j].following.erase(remove(node[j].following.begin(), node[j].following.end(), i), node[j].following.end()); 

} 

的迭代在C++中,我創建了struct user,其中載體followerfollowing存儲索引以一些其他用戶屬於vector node。在最後的for循環中,我想銷燬來自其他用戶的vector followerfollowing的所有索引i(其指代具體的user i);不幸,用gcc/4.7.2,用C++ 11,I得到這樣的錯誤:C++ - 錯誤與矢量

error: cannot convert 'std::vector<long unsigned int>::iterator {aka __gnu_cxx::__normal_iterator<long unsigned int*, std::vector<long unsigned int> >}' to 'const char*' for argument '1' to 'int remove(const char*)' 

我也試圖與一個for循環迭代器,for (vector<size_t>::iterator it = node[i].follower.begin(); it != node[i].follower.end(); ++it),在循環的代碼中使用*it,但我仍然獲得類似錯誤。

我不知道該怎麼做。

+0

您發佈的代碼[compiles fine](http://coliru.stacked-crooked.com/a/48078131585571de)。你是否包含'algorithm'?嘗試刪除'使用命名空間標準;'顯式限定爲'標準::' - 你可能有一些其他'刪除'可見。 –

+0

我知道這是一個愚蠢的錯誤... – Pippo

回答

8
#include <algorithm> 

否則,編譯器會嘗試使用其他remove功能是用於刪除文件,並接受一個C風格串(通過包括<iostream>)。

+1

認真嗎?在過去的2分鐘裏,我很喜歡「爲什麼不會那樣工作」:D +1 – Kunal

+0

謝謝。我犯了一個非常愚蠢的錯誤。 – Pippo

+1

+1我也犯了一個愚蠢的錯誤;) –