Vì vậy, tôi có một chức năng gọi là tìm kiếm, trong đó có hai phiên bản:Làm thế nào để sử dụng hai chức năng, một iterator trở về, các const_iterator trở khác
template <typename T>
typename btree<T>::iterator btree<T>::find(const T& elem)
{
//Implementation
}
và thứ hai là phiên bản const_iterator:
template <typename T>
typename btree<T>::const_iterator btree<T>::find(const T& elem) const
{
//Implementation
}
Trong tập tin thử nghiệm của tôi khi tôi làm
btree<char>::iterator it = myTree.find('M');
Tất cả mọi thứ hoạt động tốt, tuy nhiên khi tôi sử dụng const_iterat hoặc phiên bản:
btree<char>::const_iterator it = myTree.find('M');
Nó mang lại cho tôi những lỗi
error: conversion from 'btree_iterator' to non-scalar type 'const_btree_iterator' requested
Mà rõ ràng có nghĩa là tìm thấy là chỉ bao giờ sử dụng iterator (không const
) phiên bản. Tôi biết rằng C++ được cho là sẽ tự động gọi phiên bản const_iterator
- nếu tôi đã làm mọi thứ đúng. Câu hỏi đặt ra là, tôi có thể làm gì sai?
Các lớp iterator là:
class btree_iterator
và class const_btree_iterator
mà chỉ là một bản sao của dán btree_iterator
với những cái tên đã thay đổi
Dưới đây là toàn bộ mã nguồn:
btree_iterator.h (bao gồm const_btree_iterator) http://pastebin.com/zQnj9DxA
btree.h http://pastebin.com/9U5AXmtV
btree.tem http://pastebin.com/U9uV3uXj
Cả hai phiên bản const và không const của trình biến đổi btree có thể nhìn thấy nơi bạn gọi myTree.find không? bạn có thể đăng toàn bộ tập tin không? – jopasserat
Đã chỉnh sửa câu hỏi có liên kết đến mã nguồn – Arvin