我有这两个班级:
class iterator {
public:
Node<K,V>* n;
iterator():n(NULL){}
iterator(const iterator& iter):n(iter.n){}
explicit iterator(Node<K,V>* nodePtr):n(nodePtr) {}
void operator=(const iterator& iter);
void operator++();
Node<K,V>& operator*();
bool operator!=(const iterator& iter);
K& operator[](const Key& k)const;
V& operator[](const Val& v)const;
};
//----const_iterator-class---------------------------
class const_iterator : public iterator {
public:
const Node<K,V>* n;
const_iterator():n(NULL);
const_iterator(const const_iterator& iter):n(iter.n){}
const_iterator(const iterator& iter):n(iter.n){}
explicit const_iterator(const Node<K,V>* node):n(node){}
void operator=(const const_iterator& iter){
n=iter.n;
}
void operator++(){
n = n->next;
}
};
如果方法的参数类型错误,我想自动将iterator
转换为const_iterator
。我正在尝试使用:
const_iterator(iterator& iter):n(iter.n){}
为什么在从迭代器转换为const_iterator后尝试访问iter.n(n指向的值)内的内容时会出现分段错误?
答案 0 :(得分:0)
m.begin()和.end可能会返回一个临时的?
所以你需要的是
class const_iterator {
public:
const_iterator(const iterator &iter) {}
};
答案 1 :(得分:0)
以下是演示此类转换的代码:
#include <iostream>
class iterator {
public:
iterator() { i = -1; }
int i;
void bar() const { std::cout << "iterator::bar() " << i << std::endl; }
};
class const_iterator : public iterator {
public:
const_iterator(int ii) : i(ii) {}
const_iterator(const iterator &it) : i(it.i) {}
const int i;
void bar() const { std::cout << "const_iterator::bar() " << i << std::endl; }
};
void foo(const const_iterator &it) {
it.bar();
}
int main() {
iterator it;
it.i = 777;
foo(it);
return 0;
}