1

Data* を保持し、内部クラス Iterator を持つ一般的な抽象リンク リスト (AbstractList) を作成しました。次に、JobList と呼ばれる Job クラス オブジェクトの AbstractList から派生するリンク リストを作成しました。

問題は、抽象であるデータを返す必要があるため、AbstractList の Iterator クラスに operator* を実装できないことです。

だから、派生クラスのJobListに実装する必要があると思ったのですが、できません。これがコードです、どこで間違ったのですか?

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

および派生クラス JobList:

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?
};

編集: AbstractList の Iterator に次のコードを入れようとしました:

Data *operator*() {return curr->getData();}

そして、派生クラス JobList のこのコード:

Job *Iterator::operator*() {return (Job*)Iterator::operator*}

しかし、次のエラーが発生します: 'JobList' : クラスには明示的なオーバーライド '*' が含まれていますが、関数宣言を含むインターフェイスから派生していません。

4

0 に答える 0