Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #9788

Re: issues with const and iterator

Path csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!nx02.iad01.newshosting.com!newshosting.com!news-out.readnews.com!transit3.readnews.com!postnews.google.com!news4.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From Ian Collins <ian-news@hotmail.com>
Newsgroups comp.lang.c++
Subject Re: issues with const and iterator
Date Tue, 06 Sep 2011 21:56:23 +1200
Lines 65
Message-ID <9cm927F72aU3@mid.individual.net> (permalink)
References <7ba85c39-9ae1-46d4-9a8f-7f0987a2c4a9@m3g2000pri.googlegroups.com>
Mime-Version 1.0
Content-Type text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding 8bit
X-Trace individual.net CvH7Fy02dru/IcnL085stgZPTXQdglvwegbKaPxQ9aauicyVID
Cancel-Lock sha1:Q+bwXCu02aQWLyZD8e3rE4Z5mUU=
User-Agent Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.2.9) Gecko/20101021 Lightning/1.0b2 Thunderbird/3.1.4
In-Reply-To <7ba85c39-9ae1-46d4-9a8f-7f0987a2c4a9@m3g2000pri.googlegroups.com>
Xref x330-a1.tempe.blueboxinc.net comp.lang.c++:9788

Show key headers only | View raw


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

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

issues with const and iterator "hweekuan@yahoo.com" <hweekuan2011@gmail.com> - 2011-09-06 02:46 -0700
  Re: issues with const and iterator Ian Collins <ian-news@hotmail.com> - 2011-09-06 21:56 +1200
    Re: issues with const and iterator James Kanze <james.kanze@gmail.com> - 2011-09-06 15:24 -0700
      Re: issues with const and iterator Ian Collins <ian-news@hotmail.com> - 2011-09-07 10:56 +1200
        Re: issues with const and iterator red floyd <no.spam.here@its.invalid> - 2011-09-06 16:11 -0700

csiph-web