Why can't I use an Iterator with a Reference Parameter?

C

cppaddict

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 said:
::iterator' i
n function NativeOcr::testPoints(const Point &,const
std::map<Point,unsigned lon
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
 
A

Andrey Tarasevich

cppaddict said:
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.
 
C

cppaddict

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top