0

これがクラス定義です

template <typename key_type, typename mapped_type>
class mymap {
    public:
    node<key_type, mapped_type> *root;

    /* Utility Functions */
    int height(node<key_type, mapped_type> *);
    int getBalance(node<key_type, mapped_type> *);

    node<key_type, mapped_type> *newNode(key_type, mapped_type);
    node<key_type, mapped_type> *rightRotate(node<key_type, mapped_type> *);
    node<key_type, mapped_type> *leftRotate(node<key_type, mapped_type> *);
    node<key_type, mapped_type> *insert_node(node<key_type, mapped_type> *, key_type, mapped_type);
    node<key_type, mapped_type> *minValueNode(node<key_type, mapped_type> *);
    node<key_type, mapped_type> *deleteNode(node<key_type, mapped_type> *, key_type);

    void insert(key_type, mapped_type);

    // Constructor
    mymap()
    {
    root = NULL;
    }


    class iterator {
        public:

        node<key_type,mapped_type> *ptr;

        iterator(){
            ptr = NULL;
        }
        /*void iterator(iterator &x) {
            ptr = x.ptr;

        }*/

        void operator++(int) {                
            ptr = increment(ptr); 
        }

        void operator=(const iterator &it) {
            ptr = it.ptr;
        //return (*this);
        }


        /*void  operator--(int) {
            ptr = decrement(ptr); 
        }*/

        void operator++() {
            ptr = increment(ptr); 
        }

        /*
        node <key_type,mapped_type>* operator--() {
            return *(decrement(ptr));
        }

        bool operator !=(iterator itr) {
            return (ptr != itr.ptr);
        }


        bool operator ==(iterator itr) {
            return (ptr == itr.ptr);
        }
        */  
    };

    iterator begin() {

        iterator it ;
        node<key_type,mapped_type> * tmp = root;

        while (tmp->left != NULL)
            tmp = tmp->left;    

        it.ptr = tmp;
        return it;
    }

    iterator end() {
        iterator it;
        it.ptr = NULL;
        return it;
    }

};

メインでは、このコードはコンパイルされず、10 行目でエラーが発生します。おそらく、postfix++ と代入演算子をオーバーロードしているときに何か間違ったことをしようとしているからです。

mymap<int, int> A;

A.insert(1, 5);
A.insert(2, 5);
A.insert(3, 5);
A.insert(4, 5);

mymap<int,int> :: iterator it = A.begin();
mymap<int,int> :: iterator it1 = A.end();
it1 = it++;

Plz help :(。これは、私が達成しようとしているマップの AVL 実装です。必要な場合は、完全なマップ ファイルへのリンクです 。https://www.box.com/s/oom4bjnve9zmlpdcevip

4

2 に答える 2

1

戻り値の型が間違っています。前置演算子も後置演算子も を返しませんvoid。Prefix は を返し、iterator &postfix はiteratorインスタンスを返す必要があります。

参考: http://msdn.microsoft.com/en-US/library/f6s9k9ta%28v=VS.80%29.aspx

于 2012-11-06T14:55:54.483 に答える
1
it1 = it++;

これはイテレータのポストインクリメントを評価し、戻り値の型 (宣言内の is void) を使用して initialize を実行しますit1が、これはコンパイラ エラーです。演算子をオーバーロードするときは、ints do のように行う必要があることに注意してください。つまり、混乱を避けるために、既存の型の演算子の動作を模倣するようにしてください。これにはoperator=、割り当てられたオブジェクトへの参照を返すことが含まれます。

于 2012-11-06T15:14:08.967 に答える