compilation error: cannot be overloaded

P

prakash.mirji

Hello,

I am trying to compile C++ code which uses rogue wave 9.0 classes on
RHEL
4.0. I use gnu g++ compiler to compile the code.
Compiler is not able to match the right type of parameters to overload
the
methods of RW classes.
Below are the two methods among others in the rw/ep_scntn.h header
file
where compiler says cannot be overloaded.

RWBoolean contains(RWBoolean(*fn)(const_value,void*),void* x) const;
RWBoolean contains(RWBoolean(*fn)(value_type,void*),void* x) const
{ return base_type::contains(fn,x); }

Compiler is treating the first parameter in above methods as same.

When I issue a make command from one of our c++ module, I get below
error

/usr/bin/g++ -g -fpic -D_POSIX_SOURCE -DTRACING -D__EXTENSIONS__ -
D__RWCOMPILER_H__
-D_REENTRANT -D_RWCONFIG=8s -D_RWCONFIG_12d -D_RWSTDDEBUG -
DRWDEBUG -c
TrackListMap.C -I../inc -I/psalms/common/inc -I/psalms/common/Map/inc -
I/psalms/common/Scan/inc
-I/opt/ossasn1/linux-glibc2.2.trial/8.2.0-betaA/include -I/psalms/
common/ASNFw2/sep/inc
-I/psalms/common/DbFw/inc -I/psalms/common/DbFwMgr/inc -I/psalms/
common/Time/inc
-I/psalms/common/LoggingFw/inc -I/psalms/common/ExcepFw/inc -I/psalms/
common/ConfigFw/inc
-I/psalms/common/SdtArm/inc -I/opt/RogueWave/SourcePro -o
TrackListMap.o

In file included from ../inc/TrackListMap.h:18,
from TrackListMap.C:15:
/opt/RogueWave/SourcePro/rw/ep_scntn.h: In instantiation of
`RW_PCntnr<std::vector<const RWCString*, std::allocator<const
RWCString*> >,
RWTPtrOrderedVector said:
const RWCString>':
/opt/RogueWave/SourcePro/rw/ep_seq.h:50: instantiated from
`RW_PSeq<std::vector<const RWCString*, std::allocator<const
RWCString*> >,
RWTPtrOrderedVector said:
const RWCString>'
/opt/RogueWave/SourcePro/rw/tpordvec.h:65: instantiated from
`RWTPtrOrderedVector said:
/psalms/common/Map/inc/MapFile.h:27: instantiated from here
/opt/RogueWave/SourcePro/rw/ep_scntn.h:92: error: `RWBoolean
RW_PCntnr<StdColl, RWColl, T>::contains(RWBoolean (*)(typename
StdColl::value_type, void*), void*) const [with StdColl =
std::vector<const
RWColl = said:
const RWCString]' and `RWBoolean RW_PCntnr<StdColl, RWColl,
T>::contains(RWBoolean (*)(const T*, void*), void*) const [with
StdColl =
std::vector<const RWCString*, std::allocator<const RWCString*> >,
RWColl =
RWTPtrOrderedVector said:
const RWCString]' cannot be overloaded
/opt/RogueWave/SourcePro/rw/ep_scntn.cc:96: error: `typename
RW_PCntnr<StdColl, RWColl, T>::value_type RW_PCntnr<StdColl, RWColl,
T>::find(RWBoolean (*)(typename StdColl::value_type, void*), void*)
const
[with StdColl = std::vector<const RWCString*, std::allocator<const
RWCString*> >, RWColl = RWTPtrOrderedVector<const RWCString,
std::allocator<const RWCString*> >, T = const RWCString]' and
`typename
RW_PCntnr<StdColl, RWColl, T>::value_type RW_PCntnr<StdColl, RWColl,
T>::find(RWBoolean (*)(const T*, void*), void*) const [with StdColl =
std::vector<const RWCString*, std::allocator<const RWCString*> >,
RWColl =
RWTPtrOrderedVector said:
const RWCString]' cannot be overloaded
..........................
...........................


any idea why we get above error. and how to fix the same.

Thanks & Regards,
Prakash
 
I

Ivan Vecerina

: I am trying to compile C++ code which uses rogue wave 9.0 classes on
: RHEL
: 4.0. I use gnu g++ compiler to compile the code.
: Compiler is not able to match the right type of parameters to overload
: the
: methods of RW classes.
: Below are the two methods among others in the rw/ep_scntn.h header
: file
: where compiler says cannot be overloaded.
:
: RWBoolean contains(RWBoolean(*fn)(const_value,void*),void* x) const;
: RWBoolean contains(RWBoolean(*fn)(value_type,void*),void* x) const
: { return base_type::contains(fn,x); }
:
: Compiler is treating the first parameter in above methods as same.
Hmm, just making a best guess from this short code fragment:
Unless const_value and value_type are reference-types, the above
overload is indeed illegal.
The const-ness of a by-value parameter does not affect the
signature of a function. That is, the two following declarations
are not overloads, but refer to the exact same function:
void f( int a );
void f( int const a );

: any idea why we get above error. and how to fix the same.

Concretely, the following would be valid:
RWBoolean contains(RWBoolean(*fn)(const_value&,void*),void* x) const;
RWBoolean contains(RWBoolean(*fn)(value_type&,void*),void* x) const

[ Assuming typedef T value_type; typedef T const const_value; ]

If you need further guidance, please try to extract a
self-contained code sample that reproduces the error,
or ask on a forum dedicated to the Rogue Wave libraries...

I hope this helps,
Ivan
 

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

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top