![]() |
Why can't I use an Iterator with a Reference Parameter?
My initial method sig was:
bool NativeOcr::testPoints(Point positionCoords, std::map<Point, COLORREF> testPnts) const ; I changed it to: bool NativeOcr::testPoints(const Point& positionCoords, const std::map<Point, COLORREF>& testPnts) const ; Whereas before it compiled, now it errors on the line marked below (excerpt from method body): std::map<Point, COLORREF>::iterator iter; int x,y; //ERROR ON NEXT LINE for (iter = testPnts.begin(); iter != testPnts.end(); ++iter) { //do stuff } I thought you could use refs just like the regular variable. According the FAQ at: http://www.parashift.com/c++-faq-lite/references.html "please do not think of a reference as a funny looking pointer to an object. A reference is the object. It is not a pointer to the object, nor a copy of the object. It is the object." Why does this not apply here? Thanks for an explanation, cpp -----------------ERROR MESSAGE--------------- Error E2034 NativeOcr.cpp 494: Cannot convert '__rwstd::__rb_tree<Point,std::pai r<const Point,unsigned long>,__rwstd::__select1st<std::pair<const Point,unsigned long>,Point>,std::less<Point>,std::allocator<std:: pair<const Point,unsigned lon g> > >::const_iterator' to '__rwstd::__rb_tree<Point,std::pair<const Point,unsig ned long>,__rwstd::__select1st<std::pair<const Point,unsigned long>,Point>,std:: less<Point>,std::allocator<std::pair<const Point,unsigned long> > >::iterator' i n function NativeOcr::testPoints(const Point &,const std::map<Point,unsigned lon g,std::less<Point>,std::allocator<std::pair<const Point,unsigned long> > > &) co nst Error E2094 NativeOcr.cpp 494: 'operator!=' not implemented in type '__rwstd::__ rb_tree<Point,std::pair<const Point,unsigned long>,__rwstd::__select1st<std::pai r<const Point,unsigned long>,Point>,std::less<Point>,std::allocator<std:: pair<co nst Point,unsigned long> > >::iterator' for arguments of type '__rwstd::__rb_tre e<Point,std::pair<const Point,unsigned long>,__rwstd::__select1st<std::pair<cons t Point,unsigned long>,Point>,std::less<Point>,std::allocator<std:: pair<const Po int,unsigned long> > >::const_iterator' in function NativeOcr::testPoints(const Point &,const std::map<Point,unsigned long,std::less<Point>,std::allocator<std:: pair<const Point,unsigned long> > > &) const *** 2 errors in Compile *** make: *** [NativeOcr.obj] Error 1 |
Re: Why can't I use an Iterator with a Reference Parameter?
cppaddict wrote:
> My initial method sig was: > > bool NativeOcr::testPoints(Point positionCoords, std::map<Point, > COLORREF> testPnts) const ; > > I changed it to: > > bool NativeOcr::testPoints(const Point& positionCoords, const > std::map<Point, COLORREF>& testPnts) const ; > > Whereas before it compiled, now it errors on the line marked below > (excerpt from method body): > > std::map<Point, COLORREF>::iterator iter; > int x,y; > //ERROR ON NEXT LINE > for (iter = testPnts.begin(); iter != testPnts.end(); ++iter) { > //do stuff > } > > I thought you could use refs just like the regular variable. In this case it is not about references, it is about const-correctness. You made your 'std::map<>' parameter const-qualified. For this reason in the reference-based version the container's 'begin()' method returns 'std::map<>::const_iterator'. A 'const_iterator' cannot be assigned to (or used to initialize) an 'iterator'. That's what's causing the error. Change the iterator declaration to std::map<Point, COLORREF>::const_iterator iter; and the code should compile. -- Best regards, Andrey Tarasevich |
Re: Why can't I use an Iterator with a Reference Parameter?
>In this case it is not about references, it is about const-correctness. >You made your 'std::map<>' parameter const-qualified. For this reason in >the reference-based version the container's 'begin()' method returns >'std::map<>::const_iterator'. A 'const_iterator' cannot be assigned to >(or used to initialize) an 'iterator'. That's what's causing the error. >Change the iterator declaration to > > std::map<Point, COLORREF>::const_iterator iter; > >and the code should compile. That was it. Thanks very much. cpp |
| All times are GMT. The time now is 06:50 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.