Я получаю следующую ошибку при попытке вернуть значение с помощью оператора * () в моем настраиваемом итераторе.
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_;
ссылка является typefef'ed следующим образом в классе 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) {}
Пожалуйста, дайте мне знать, если я пропустил, включая любую важную информацию, и извиненияесли я это сделал!
Судя по ошибке, похоже, что я пытаюсь вернуть ссылку на локальную переменную.Сам итератор может быть локальным, но возвращаемое им значение не должно быть, поскольку конструктор узла изначально получает ссылку и сохраняет ее в узле.
Заранее спасибо и с уважением!