【问题标题】:Operator Overloading not working even when both postfix and assignment are overloaded即使后缀和赋值都重载,运算符重载也不起作用
【发布时间】:2012-11-06 14:48:18
【问题描述】:

这是类定义

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

};

在 main 中,此代码无法编译并在第 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++;

请帮助:(。这是我正在尝试完成的地图的 AVL 实现。 如果有必要,这是完整地图文件的链接。 https://www.box.com/s/oom4bjnve9zmlpdcevip

【问题讨论】:

  • 编译器给出的错误是什么?
  • 您应该了解构造函数初始化器列表,最好在着手进行更大的设计(例如目前的设计)之前...

标签: c++ operator-overloading assignment-operator postfix-operator


【解决方案1】:

您有错误的返回类型。前缀和后缀运算符都不返回void。前缀应该返回一个iterator &amp;,后缀应该返回一个iterator 实例。

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

【讨论】:

    【解决方案2】:
    it1 = it++;
    

    这将评估您的迭代器的后增量,并使用返回类型(在您的声明中为void)初始化it1,这是编译器错误。请注意,当重载运算符时,您应该ints 那样做。 IE。尝试模仿现有类型中运算符的行为以避免混淆。这包括让operator= 返回对已分配对象的引用。

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 2011-05-15
      • 2019-07-30
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多