Как использовать две функции: одна возвращает итератор, другая возвращает const_iterator

Итак, у меня есть функция с именем 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

7
задан Arvin 24 October 2011 в 10:51
поделиться