C++ 没有重载函数的实例;。抹去;匹配参数列表
错误为“没有重载函数的实例…与参数列表匹配” 我知道我给了擦除函数错误的参数,但我不知道 如何解决这个问题C++ 没有重载函数的实例;。抹去;匹配参数列表,c++,vector,C++,Vector,错误为“没有重载函数的实例…与参数列表匹配” 我知道我给了擦除函数错误的参数,但我不知道 如何解决这个问题 void Folder::DeleteFolder(Folder* folder) { for(int i = 0; i> (this->Folder::GetFolders().size());i++) { if(this->Folder::GetFolders()[i]==folder) {
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;
}
void Folder::DeleteFolder(文件夹*文件夹)
{
对于(inti=0;i>(此->文件夹::GetFolders().size());i++)
{
如果(此->文件夹::GetFolders()[i]==文件夹)
{
//问题发生在下一行
此->文件夹::GetFolders().erase(此->文件夹::GetFolders()[i]);
打破
}
}
}
//下面是GetFolders的方法
std::vector&Folder::GetFolders()
{
返回此->列表文件夹;
}
编辑:
您可以简单地使用:
std::vector<Folder*>::iterator itr= listOfFolders.begin();
while( itr != listOfFolders.end())
{
if(*itr==folder){
listOfFolders.erase( itr );
break;
}
++itr;
}
std::vector::iterator itr=listOfFolders.begin();
while(itr!=listOfFolders.end())
{
如果(*itr==文件夹){
文件夹清除列表(itr);
打破
}
++itr;
}
首先,我认为您的意思是将文件夹指向的对象与向量中的对象进行比较
执行任务的一般方法是使用标准算法std::find_
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 );
}
void Folder::DeleteFolder(文件夹*文件夹)
{
std::vector&v=this->Folder::GetFolders();
auto it=std::find_if(v.begin(),v.end(),
[&](文件夹*f){return(*f==*文件夹);});
如果(it!=v.end())v.erase(it);
}
提示:erase()
需要一个std::vector::iterator
!看一看,我试过juanchopanza的“擦除-删除”成语,效果很好。感谢大家的快速回答safaik类std::vector没有找到成员函数。@VladfromMoscow,你说得对。这是长期使用Qt容器的结果。我已经编辑了我的代码。谢谢