У меня проблемы с классом C++, который я пытаюсь реализовать.C++ typedef и subclassing
Подкласс 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;
};
вы можете вставить код, где вы используете MyPairList. BTW, наследующий вектор - не очень хорошая идея. –
Это ребенок-плакат для использования 'auto'. Все, что вам нужно, это 'auto Item = this-> begin();' – Praetorian
@XiaotianPei Я анализирую xml-данные для каждой итерации через xml. Я создаю один из вышеуказанных классов и нажимаю ссылку на коллекции, по имени с его ассоциированными объект и один по идентификатору с ассоциированным объектом. –