quindi ho una funzione chiamata find, che ha due versioni:Come utilizzare due funzioni, un'iteratore ritorno, l'altro const_iterator ritorno
template <typename T>
typename btree<T>::iterator btree<T>::find(const T& elem)
{
//Implementation
}
e l'altro è la versione const_iterator:
template <typename T>
typename btree<T>::const_iterator btree<T>::find(const T& elem) const
{
//Implementation
}
Nel mio file di prova quando faccio
btree<char>::iterator it = myTree.find('M');
Tutto funziona bene, ma quando uso il const_iterat o Versione:
btree<char>::const_iterator it = myTree.find('M');
Mi dà l'errore
error: conversion from 'btree_iterator' to non-scalar type 'const_btree_iterator' requested
Il che significa, ovviamente, che scoperta è sempre e solo con l'iteratore (non const
) versione. So che il C++ dovrebbe chiamare automaticamente la versione const_iterator
- se avessi fatto tutto bene. Quindi la domanda è: cosa potrei fare di sbagliato?
Le classi di iteratori sono:
class btree_iterator
e class const_btree_iterator
che è solo una pasta copia btree_iterator
con i nomi cambiati
Ecco il codice sorgente completo:
btree_iterator.h (include const_btree_iterator) http://pastebin.com/zQnj9DxA
btree.h http://pastebin.com/9U5AXmtV
btree.tem http://pastebin.com/U9uV3uXj
Sono visibili entrambe le versioni const e non-const dell'iteratore btree in cui si chiama myTree.find? puoi pubblicare l'intero file? – jopasserat
Modificata la domanda con collegamenti al codice sorgente – Arvin