Итак, у меня есть функция с именем find, которая имеет две версии:
template
typename btree::iterator btree::find(const T& elem)
{
//Implementation
}
и другую это версия const_iterator:
template
typename btree::const_iterator btree::find(const T& elem) const
{
//Implementation
}
В моем тестовом файле, когда я делаю
btree::iterator it = myTree.find('M');
Все работает нормально, однако, когда я использую версию const_iterator:
btree::const_iterator it = myTree.find('M');
Это дает мне ошибку
error: преобразование из 'btree_iterator' в non -scalar type 'const_btree_iterator' запрошен
Это, очевидно, означает, что find всегда использует только версию итератора (не const
). Я знаю, что C ++ должен автоматически вызывать версию const_iterator
- если я все сделал правильно. Итак, вопрос в том, что я делаю не так?
Классы итераторов:
класс btree_iterator
и класс const_btree_iterator
, который является просто копией btree_iterator
с измененными именами
Вот полный исходный код:
btree_iterator.h (включает const_btree_iterator) http://pastebin.com/zQnj9DxA
btree.h http://pastebin.com/9U5AXmtV
btree.tem http://pastebin.com/U9uV3uXj