const iterator — C ++ const_iterator нет соответствующего конструктора

Я пытаюсь создать собственный вложенный класс const_iterator для моего класса списков на основе массива. вот класс

class const_iterator {
private:
const T *p;
public:
const_iterator(const T *l) {
p = l;
}
const_iterator(const_iterator &ci) { p=ci.p;}
const T &operator*() const {return *p;}
bool operator==(const iterator &i) const {
if(*p==*i)
return true;
else
return false;
}
bool operator!=(const_iterator &i) const {
if(*p!=*i)
return true;
else
return false;
}
const_iterator &operator=(const_iterator &i) const {
p=i.p;
return this;
}
const_iterator &operator++() const {
return const_iterator(p+1);
}
const_iterator &operator--() const {
return const_iterator(p-1);
}

const_iterator operator++(int) const {
p = p+1;
return const_iterator(p-1);
};
const_iterator operator--(int) const {
p=p-1;
return const_iterator(p+1);
}

};

Однако, когда я возвращаюсь в свой класс, чтобы начать, закончить и т. Д., Как показано здесь:

iterator begin() {
return iterator(&data[0]);
}
const_iterator begin() const {
return const_iterator(&data[0]);
}
iterator end() {return iterator(&data[place+1]);}
const_iterator end() const {return const_iterator(&data[place+1]);}

const_iterator cbegin() const {
return const_iterator(&data[0]);
}
const_iterator cend() const {return const_iterator(&data[place+1]);}

Я получаю сообщение об ошибке: «нет подходящего конструктора для инициализации
‘ArrayList :: const_iterator «на моем cbegin и cend. Я знаю, что это, вероятно, глупость, которую я не понимаю в C ++. Заранее спасибо за помощь!

1

Решение

Либо удалите const_iterator конструктор копирования (так как он не нужен), или заставьте конструктор копирования взять const const_iterator&,

Вот минимальный пример:

template <typename T>
class ArrayList
{
public:
class const_iterator {
private:
const T *p;
public:
const_iterator(const T *l) {
p = l;
}
const_iterator(const const_iterator &ci) : p(ci.p) {}
};

T data[10];

const_iterator cbegin() const {
return const_iterator(&data[0]);
}
};

int main()
{
ArrayList<int> a;
ArrayList<int>::const_iterator it = a.cbegin();
}

Это компилируется здесь: http://ideone.com/04EE4P

Удаление конструктора копии также компилируется без ошибок. Это означает, что ваш пользовательский конструктор копирования, который принимает non-const ссылка была причиной проблемы.

1

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

const_iterator( T *l) должно быть const_iterator(const T *l)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector