【发布时间】:2022-01-13 20:23:43
【问题描述】:
你好,我正在编写一个函数,从指针向量中擦除元素(到类对象),但我不能让它工作。
我收到此错误
error: no matching function for call to ‘std::vector<biblio::Reference*>::erase(biblio::Reference*&)’
std::vector<Reference*> m_vReferences; //Reference is a class
for ( auto iter : m_vReferences) //Loop for on every pointer to a class object
{
if (iter->reqId () == p_id) //Check if the id of the class object is the id we want
{
m_vReferences.erase (iter); //Erase the pointer in the vector of pointer
}
else
{
throw EmptyReferenceException (iter->reqFormatedReference ()); //An exception
}
}
【问题讨论】:
-
en.cppreference.com/w/cpp/container/vector/erase 接受一个迭代器,你给它一个元素。
-
矢量不支持按键擦除,因为没有按键。
-
您可能正在寻找
std::erase_if(从 C++20 开始)。 -
for ( auto iter : m_vReferences)是一个错误命名的例子。iter变量不是迭代器,它是Biblio::Reference*类型的对象。 -
更糟糕的是……这是一个 UB。擦除返回新的迭代器,给它的迭代器变得无效并且不应该增加