Я получаю следующую ошибку при попытке вернуть значение с помощью оператора *() в моем пользовательском итераторе.
error: invalid initialization of non-const reference of type 'char&' from a temporary of type 'char'
Если кто-то может мне помочь, это было бы здорово!
Особенности кода заключаются в следующем:
Тестовый код:
for(btree<char>::iterator itr = tree.begin(); itr != tree.end(); ++itr) {
cout << *itr << " "; // <- this line complains about the * operator.
}
Код оператора*():
template <typename T> typename btree_iterator<T>::reference btree_iterator<T>::operator*() const {
return pointee_->value(); // <- this line is where the error above is produced from.
}
pointee_ из класса btree_iterator — это закрытая переменная, определяемая следующим образом:
btree_node<T>* pointee_;
ссылка в классе btree_iterator имеет следующий тип:
typedef T& reference;
value() определено в классе btree_node следующим образом:
T value() const;
// function definition.
template <typename T> T btree_node<T>::value() const { return value_; }
значение изначально сохраняется в btree_node через его конструктор следующим образом:
template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}
Пожалуйста, дайте мне знать, если я пропустил какую-либо важную информацию, и извините, если я это сделал!
Судя по ошибке, похоже, что я пытаюсь вернуть ссылку на локальную переменную. Сам итератор может быть локальным, но возвращаемое им значение не должно быть таковым, поскольку конструктор узла изначально принимает ссылку и сохраняет ее в узле.
Заранее спасибо и с уважением!