Re: issues with const and iterator
On 09/ 6/11 09:46 PM, hweekuan@yahoo.com wrote:
i am using some code from a library in which i do not want to edit.
building on the library i have some compile time errors about
assigning iterators. below is the distilled code and error message.
appreciate your help:
Answer at the end!
1 #include<vector>
2 // --------------------------------------
3 // struct B cannot be edited
4 // --------------------------------------
5 template<class D>
6 struct B {
7
8 B(): data(5) { }
9 const D& get() const { return data; }
Returns a const object.
10 D data;
11 };
12 // --------------------------------------
13 // edit struct C to make the code compile
14 // --------------------------------------
15 struct C {
16
17 typedef std::vector<int> D;
18 typedef D::iterator Ditr;
19
20 C () {
21 bd = new B<D>();
22 begin_itr = (bd->get()).begin(); // error happens here
(bd->get()).begin() returns a const_iterator.
23 }
24 Ditr begin_itr;
25 B<D> * bd;
26 };
27 // --------------------------------------
28 int main ( ) { }
Line numbers in Usenet posts are a bad idea if you want people to try
your code!
g++ -Wall vector_t.C
vector_t.C: In constructor ?C::C()?:
vector_t.C:22: error: no match for ?operator=? in ?((C*)this)-
C::begin_itr = ((const std::vector<int, std::allocator<int> >*)
((C*)this)->C::bd-> B<D>::get [with D = std::vector<int,
std::allocator<int> >]())->std::vector<_Tp, _Alloc>::begin [with _Tp =
int, _Alloc = std::allocator<int>]()?
/usr/include/c++/4.2.1/bits/stl_iterator.h:637: note: candidates are:
__gnu_cxx::__normal_iterator<int*, std::vector<int,
std::allocator<int> > >& __gnu_cxx::__normal_iterator<int*,
std::vector<int, std::allocator<int> > >::operator=(const
__gnu_cxx::__normal_iterator<int*, std::vector<int,
std::allocator<int> > >&)
In it's own ridiculously long winded way, g++ is telling you you can't
assign a const iterator to an iterator!
--
Ian Collins