我在尝试实现的c ++类时遇到了一些麻烦。
我是std::vector<T>
的子类,但我无法获得迭代器。这是我的示例代码:
这一行
MyPairList::iterator Item = this->begin();
我无法获得模板类的迭代器。
我如何解决这个问题以及为什么会发生这种情况,因为现在我完全不知所措。这也在我的.h文件中描述,没有.cpp文件。
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
template<typename T>
class MyPairList : public vector<T>
{
public:
void Form()
{
_idColl.clear();
_nameColl.clear();
MyPairList::iterator Item = this->begin();
for ( ; Item != this->end() ; ++Item)
{
_idColl.insert(make_pair( (*Item)->ID, (*Item) ));
_nameColl.insert(make_pair( (*Item)->Name, (*Item) ));
}
}
T Lookup(int pID)
{
if (_idColl.find(pID) != _idColl.end())
{
return _idColl[pID];
}
return T();
}
T Lookup(const string &pName)
{
if (_nameColl.find(pName) != _nameColl.end())
{
return _nameColl[pName];
}
return T();
}
MyPairList()
{
}
private:
unordered_map<int, T> _idColl;
unordered_map<string, T> _nameColl;
};
答案 0 :(得分:1)
而不是
MyPairList::iterator Item = this->begin();
使用
typename std::vector<T>::iterator Item = this->begin();
另一种选择是创建类型别名。
using iterator = typename std::vector<T>::iterator;
using const_iterator = typename std::vector<T>::const_iterator;
然后,您可以使用:
iterator Item = this->begin();
答案 1 :(得分:0)
typename MyPairList::iterator Item = this->begin();