Перегрузка оператора не работает, даже если постфикс и назначение перегружены

Это определение класса

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

Пожалуйста, помогите :(. Это реализация карты AVL, которую я пытаюсь выполнить.
Это ссылка на полный файл карты, если это необходимо.
https://www.box.com/s/oom4bjnve9zmlpdcevip

0

Решение

У вас неправильные типы возврата. Ни префиксные, ни постфиксные операторы не возвращаются void, Префикс должен возвращать iterator & и postfix должен вернуть iterator пример.

Для справки: http://msdn.microsoft.com/en-US/library/f6s9k9ta%28v=VS.80%29.aspx

1

Другие решения

it1 = it++;

Это позволит оценить postincrement вашего итератора и использовать тип возвращаемого значения (в вашем объявлении void) инициализировать it1, что является ошибкой компилятора. Обратите внимание, что при перегрузке операторов вы должны делай как intс. То есть Старайтесь имитировать поведение операторов в существующих типах, чтобы избежать путаницы. Это включает в себя наличие operator= возвращая ссылку на объект, который был назначен.

1