Así que tienen una función llamada hallazgo, que tiene dos versiones:Cómo utilizar dos funciones, una iterador de regresar, la otra const_iterator regresar
template <typename T>
typename btree<T>::iterator btree<T>::find(const T& elem)
{
//Implementation
}
y la otra es la versión const_iterator:
template <typename T>
typename btree<T>::const_iterator btree<T>::find(const T& elem) const
{
//Implementation
}
En mi archivo de prueba cuando lo haga
btree<char>::iterator it = myTree.find('M');
Todo funciona bien, sin embargo, cuando se utiliza la const_iterat o la versión:
btree<char>::const_iterator it = myTree.find('M');
Me da el error
error: conversion from 'btree_iterator' to non-scalar type 'const_btree_iterator' requested
Lo que obviamente significa que hallazgo es solamente siempre utilizando el iterador (no const
) versión. Sé que se supone que C++ llame a la versión const_iterator
automáticamente, si hubiera hecho todo bien. Entonces la pregunta es, ¿qué podría estar haciendo mal?
Las clases son iterador:
class btree_iterator
y class const_btree_iterator
que es sólo una copia de pasta btree_iterator
con los nombres cambiados
Éstos son el código fuente completo:
btree_iterator.h (incluye const_btree_iterator) http://pastebin.com/zQnj9DxA
btree.h http://pastebin.com/9U5AXmtV
btree.tem http://pastebin.com/U9uV3uXj
¿Están visibles las versiones const y non const del iterador btree donde llama a myTree.find? ¿puedes publicar el archivo completo? – jopasserat
Editado la pregunta con enlaces al código fuente – Arvin