C++中迭代器的重写

C++中迭代器的重写,c++,iterator,linked-list,C++,Iterator,Linked List,我制作了一个通用的抽象链表AbstractList,它包含数据*,并具有内部类迭代器。然后,我为作业类对象制作了一个从AbstractList派生的链表,称为JobList 问题是,我无法在AbstractList中的迭代器类中实现运算符*,因为它必须返回抽象数据 所以,我认为我必须在派生类作业列表中实现它,但我就是不能。 这是密码,我哪里出错了 class AbstractList { protected: ....//Node code .... Node *m_head; int m_l

我制作了一个通用的抽象链表AbstractList,它包含数据*,并具有内部类迭代器。然后,我为作业类对象制作了一个从AbstractList派生的链表,称为JobList

问题是,我无法在AbstractList中的迭代器类中实现运算符*,因为它必须返回抽象数据

所以,我认为我必须在派生类作业列表中实现它,但我就是不能。 这是密码,我哪里出错了

class AbstractList
{
protected:
....//Node code
....

Node *m_head;
int m_len;

public:
    class Iterator
    {
    private:
        Node *curr;
    public:
        Iterator(Node* nd): curr(nd){}
        Iterator(const Iterator& it) {curr=it.curr;}
        Iterator operator++() {curr=curr->getNext(); return *this;}
        bool operator==(const Iterator& other) {return curr==other.curr;}
        bool operator!=(const Iterator& other) {return curr!=other.curr;}
       //here I should implement operator *, but I can't, so I do it in JobList
    };
    Iterator begin() {return Iterator(m_head);}

    AbstractList();
    ~AbstractList();

    virtual void setNewNode(Data*)=0;
    Data *getFirst() const {return m_head->getData();}
};
以及派生类作业列表:

class JobList: public AbstractList
{
public:
    void setNewNode(Job*);
    Job *getFirst() const {return (Job*)AbstractList::GetFirst();}

    //here I want to implement operator*, but everything I've tried failed.
    //How should it be done?
};
Job *Iterator::operator*() {return (Job*)Iterator::operator*}
编辑: 我尝试将以下代码放入AbstractList中的迭代器中:

Data *operator*() {return curr->getData();}
以及派生类作业列表中的以下代码:

class JobList: public AbstractList
{
public:
    void setNewNode(Job*);
    Job *getFirst() const {return (Job*)AbstractList::GetFirst();}

    //here I want to implement operator*, but everything I've tried failed.
    //How should it be done?
};
Job *Iterator::operator*() {return (Job*)Iterator::operator*}
但我得到了以下结果:
“作业列表”:类包含显式重写“*”,但不是从包含函数声明的接口派生的。

什么意思是不能?你为什么不能?我哪里出错了?在一开始,您决定使用派生而不是模板,或者,可以说,甚至更早,您决定这样做,而不是使用现有的代码,如std::list或可能更好的std::priority_queue。