这是导致错误的代码:
Factory.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 }
我得到的错误:
error: no matching member function for call to 'erase' [3] _table.erase(it2); ~~~~~~~^~~~~
有小费吗?
谢谢.
解决方法
这是C 98中
map::erase
的签名:
void erase( iterator position );
这个函数需要一个迭代器,但是你传递了一个const_iterator.这就是代码无法编译的原因.
How do I fix this?
在C 11中,这甚至不是问题,因此不需要修理.那是因为在C 11中,map :: erase函数具有以下签名,因此接受const_iterator.
iterator erase( const_iterator position );
如果您不能使用新标准,则必须将变量更改为迭代器.