【发布时间】:2011-10-24 10:38:29
【问题描述】:
所以我有一个叫做 find 的函数,它有两个版本:
template <typename T>
typename btree<T>::iterator btree<T>::find(const T& elem)
{
//Implementation
}
另一个是const_iterator版本:
template <typename T>
typename btree<T>::const_iterator btree<T>::find(const T& elem) const
{
//Implementation
}
当我这样做时在我的测试文件中
btree<char>::iterator it = myTree.find('M');
一切正常,但是当我使用 const_iterator 版本时:
btree<char>::const_iterator it = myTree.find('M');
它给了我错误
错误:请求从“btree_iterator”转换为非标量类型“const_btree_iterator”
这显然意味着 find 只使用迭代器(非const)版本。我知道 C++ 应该自动调用 const_iterator 版本 - 如果我做的一切都正确的话。所以问题是,我可能做错了什么?
迭代器类是:
class btree_iterator 和 class 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
【问题讨论】:
-
在您调用 myTree.find 的地方,btree 迭代器的 const 和非 const 版本是否可见?你能把整个文件贴出来吗?
-
用源代码链接编辑问题
标签: c++ iterator compiler-errors constants