我在尝试实现的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;
    };

最佳答案

代替

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();

关于c++ - C++ Typedef和子类化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30679344/

10-13 06:10