我正在實施以下方法來刪除與map::erase()
從一個關聯表(map
)元素:當使用map :: erase()「錯誤:傳遞'***'作爲'***'參數丟棄限定符[-fpermissive]」報告
//Method in gestion.cpp
void Gestion::EliminateObject(string nomobjetg) const{
auto it = objectname.find(nameobjectg);
if (it == objectname.end())
cout << "Object not found!" << endl;
else
objectname.erase(it); //The error is reported in this line
}
在我已經定義了下列頭:
//gestion.h
#include "objects.h"
#include <list>
#include <iostream>
#include <string>
#include <memory>
#include <map>
using namespace std;
typedef std::shared_ptr<Objects> ObjPtr;
typedef map<string, ObjPtr> Objectmap;
class Gestion
{
private:
Objectmap objectname;
public:
Gestion(Objectmap objectname, Groupmap groupname);
virtual ~Gestion() {}
virtual void EliminateObject(string nameobjectg) const;
};
哪裏ObjPtr
是Objects
類型的對象的虛擬指針。
當我編譯我得到這個錯誤:
error: passing ‘const Objectmap {aka const std::map<std::basic_string<char>, std::shared_ptr<Objects> >}’ as ‘this’ argument of ‘std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator) [with _Key = std::basic_string<char>; _Tp = std::shared_ptr<Objects>; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::shared_ptr<Objects> > >; std::map<_Key, _Tp, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, std::shared_ptr<Objects> > >; std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, std::shared_ptr<Objects> > >]’ discards qualifiers [-fpermissive]
objectname.erase(it);
爲什麼這一行報告這個錯誤?我已經看到其他一些這類錯誤的帖子,但在這些情況下,問題的根本原因與聲明方法有關(const
)。在這種情況下,涉及該問題的方法是erase
,我無法對其進行修改。
無關,但你可能想通過常量引用,而不是按值傳遞'nomobjetg'。這是'void Gestion :: EliminateObject(const string&nomobjetg)'。如果這是一個std :: string,它會做一個浪費的字符串複製。 –