तो मैं एक समारोह खोज कहा जाता है, जो दो संस्करण उपयोग कैसे करें:दो काम करता है, को वापस लौटाते इटरेटर, अन्य लौटने const_iterator
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_iterat का उपयोग में या संस्करण:
btree<char>::const_iterator it = myTree.find('M');
यह मुझे त्रुटि
error: conversion from 'btree_iterator' to non-scalar type 'const_btree_iterator' requested
कौन सा स्पष्ट रूप से इसका मतलब है कि खोजने ही कभी इटरेटर (गैर const
) संस्करण का उपयोग कर रहा है देता है। मुझे पता है कि सी ++ को 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
क्या btree iterator के कॉन्स्ट और गैर-कॉन्स संस्करण दोनों हैं जहां आप myTree.find कहते हैं? क्या आप पूरी फाइल पोस्ट कर सकते हैं? – jopasserat
स्रोत कोड – Arvin