keine passenden member-Funktion für Aufruf von "löschen"
Hier ist der code, der den Fehler verursacht:
Fabrik.h:
#include <string>
#include <map>
namespace BaseSubsystems
{
template <class T>
class CFactory
{
protected:
typedef T (*FunctionPointer)();
typedef std::pair<std::string,FunctionPointer> TStringFunctionPointerPair;
typedef std::map<std::string,FunctionPointer> TFunctionPointerMap;
TFunctionPointerMap _table;
public:
CFactory () {}
virtual ~CFactory();
}; //class CFactory
template <class T>
inline CFactory<T>::~CFactory()
{
TFunctionPointerMap::const_iterator it = _table.begin();
TFunctionPointerMap::const_iterator it2;
while( it != _table.end() )
{
it2 = it;
it++;
_table.erase(it2);
}
} //~CFactory
}
Und den Fehler bekomme ich:
error: no matching member function for call to 'erase' [3]
_table.erase(it2);
~~~~~~~^~~~~
Irgendwelche Tipps?
Danke.
Was ist die Notwendigkeit der
it2
? Wie wäre _table.erase(it++)
?InformationsquelleAutor frarees | 2012-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die Signatur von
map::erase
in C++98:Diese Funktion nimmt ein
iterator
aber du bist die übergabe einesconst_iterator
. Das ist, warum der code nicht kompiliert.In C++11 ist dies nicht einmal ein problem, so dass es nicht repariert. Das ist, weil in C++11 die
map::erase
Funktion hat die folgende Signatur, und damit akzeptiert eineconst_iterator
.Wenn Sie nicht den neuen standard nutzen, müssen Sie ändern Ihre Variablen auf
iterator
statt.Wie vertreibt man einen iterator? Beispiel-code bitte?
Äh....
m.erase(it)
?InformationsquelleAutor R. Martinho Fernandes
Übergeben Sie einen const_iterator um eine Methode, die erwartet einen einfachen iterator.
Finden Sie unter: http://www.cplusplus.com/reference/stl/map/erase/
InformationsquelleAutor Kyle Lutz
Sehen, was der Meister sagt:
Scot Meyers in effective STL
Punkt 26. Lieber iterator const iterator, reverse_iterator und const_reverse_iterator. Obwohl-Container unterstützen vier iterator-Typen, einer von den Typen, die die Privilegien die andere nicht haben. Diesen Typ iterator, iterator ist etwas besonderes.
Artikel 27. Verwenden Sie Abstand und fahren Sie mit dem konvertieren eines Containers const_iterators zu Iteratoren.
Was funktioniert ist Voraus und der Abstand
InformationsquelleAutor Rohit Vipin Mathews