没有重载函数“.erase”的实例与参数列表匹配

时间:2014-05-03 09:00:50

标签: c++ vector

错误是"没有重载功能的实例...匹配参数列表" 我明白我给擦除功能提出了错误的论据,但我不知道 如何解决这个问题

    void Folder::DeleteFolder(Folder* folder)
    {
     for(int i = 0; i> (this->Folder::GetFolders().size());i++)
     {
          if(this->Folder::GetFolders()[i]==folder)
          {
             //The problem occures on the next line
             this->Folder::GetFolders().erase(this->Folder::GetFolders()[i]);
             break;
          }
     } 
    }

   //here is the method GetFolders
   std::vector<Folder*>& Folder::GetFolders()
   {
     return this->listOfFolders;
   }

2 个答案:

答案 0 :(得分:1)

首先,我认为你的意思是将文件夹指向的对象与向量中的对象进行比较。

执行任务的一般方法是使用标准算法std::find_if代码将采用以下方式

void Folder::DeleteFolder(Folder* folder)
{
    std::vector<Folder*> &v =  this->Folder::GetFolders();

    auto it = std::find_if( v.begin(), v.end(),
                            [&]( Folder *f ) { return ( *f == *folder ); } );

    if ( it != v.end() ) v.erase( it );
} 

答案 1 :(得分:0)

编辑:

您可以简单地使用:

     std::vector<Folder*>::iterator itr= listOfFolders.begin();
     while( itr != listOfFolders.end())
     {
       if(*itr==folder){
          listOfFolders.erase( itr );
          break;
       }
       ++itr;
     }