This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
no matching function for call to ...
- From: a9028033 at unet dot univie dot ac dot at
- To: gcc-help at gcc dot gnu dot org
- Date: Mon, 23 Feb 2004 14:13:20 +0100
- Subject: no matching function for call to ...
- Reply-to: a9028033 at unet dot univie dot ac dot at
Hello to all,
in an approach to porting from Solaris to Linux encountered
several errors of the art:
make -f mymakegnu1 HCSmain
g++ -g -w -v HCSmain.cc -o HCSmain
Reading specs from /usr/gnu/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/specs
Configured with: ./configure --prefix=/usr/gnu
Thread model: posix
gcc version 3.2.1
/usr/gnu/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=1 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ HCSmain.cc -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -quiet -dumpbase HCSmain.cc -g -w -version -o /tmp/cceWKMfc.s
GNU CPP version 3.2.1 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.2.1 (i686-pc-linux-gnu)
compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110).
ignoring nonexistent directory "/usr/gnu/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/gnu/include/c++/3.2.1
/usr/gnu/include/c++/3.2.1/i686-pc-linux-gnu
/usr/gnu/include/c++/3.2.1/backward
/usr/local/include
/usr/gnu/include
/usr/gnu/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/include
/usr/include
End of search list.
In file included from system.h:12,
from mobilestation.h:12,
from mobilestation.cc:1,
from HCSmain.cc:20:
intraHO.h: In constructor `intraHO::intraHO(Microlayer&, Macrolayer&)':
intraHO.h:94: no matching function for call to `HOfailure<intraHO>::
setHOexeFunction(<unknown type>)'
HOfailure.h:83: candidates are: void HOfailure<HOType>::setHOexeFunction(void
(HOType::*)(Mobilestation&)) [with HOType = intraHO]
intraHO.h:95: no matching function for call to `HOfailure<intraHO>::
setHOexeFunction(<unknown type>)'
HOfailure.h:83: candidates are: void HOfailure<HOType>::setHOexeFunction(void
(HOType::*)(Mobilestation&)) [with HOType = intraHO]
intraHO.h:96: no matching function for call to `HOfailure<intraHO>::
setFailureFunction(<unknown type>)'
HOfailure.h:89: candidates are: void HOfailure<HOType>::setFailureFunction(void
(HOType::*)(Mobilestation&)) [with HOType = intraHO]
intraHO.h:97: no matching function for call to `HOfailure<intraHO>::
setFailureFunction(<unknown type>)'
HOfailure.h:89: candidates are: void HOfailure<HOType>::setFailureFunction(void
(HOType::*)(Mobilestation&)) [with HOType = intraHO]
....
For those that are interested to help me following code is included:
### intraHO.h
#ifndef intraHO__h
#define intraHO__h intraHO__h
#include <vector>
#include "HOdelay.h"
#include "HOfailure_def.h"
#include "defResult.h"
#include "sct.h"
class Mobilestation;
class Microlayer;
class Macrolayer;
class Marker;
class intraHO
{
private:
...
void execute_HCS_HO(Mobilestation& aMobile);
void execute_intraHO(Mobilestation& aMobile);
void failure_HCS_HO(Mobilestation& aMobile);
void failure_intraHO(Mobilestation& aMobile);
...
};
inline intraHO::intraHO(Microlayer& aMicrolayer, Macrolayer& aMacrolayer)
: micro_ref(aMicrolayer), macro_ref(aMacrolayer), intraHOfailure(this), intraHCSfailure(this), dropOnHCS(false)
{
intraHOfailure.setHOexeFunction(execute_intraHO);
intraHCSfailure.setHOexeFunction(execute_HCS_HO);
intraHOfailure.setFailureFunction(failure_intraHO);
intraHCSfailure.setFailureFunction(failure_HCS_HO);
...
}
#### HO_failure_def.h
#ifndef HOfailure_def__h
#define HOfailure_def__h HOfailure_def__h
#include "HOfailure.h"
template <class HOType>
void HOfailure<HOType>::exeHO(Mobilestation& aMobile)
{
if(IsOn && !static_cast<bool>(FailureDecision()))
{
++failedHOperHOStep;
++failedHO;
if(aMobile.get_owner()->get_ref())
{
++failedHOperHOStepRef;
++failedHORef;
}
(HOptr->*atfailure)(aMobile);
}
else
{
++notfailedHO;
if(aMobile.get_owner()->get_ref())
++notfailedHORef;
(HOptr->*executeHO)(aMobile);
}
}
#endif // HOfailure_def__h
####HO_failure.h
#ifndef HOfailure__h
#define HOfailure__h HOfailure__h
#include <vector>
#include "sudrand.h"
#include "random_select.h"
#include "HOfailure.h"
class Mobilestation;
template <class HOType>
class HOfailure
{
private:
HOType* const HOptr;
Sudrand* RNG;
RandomSelect FailureDecision;
void (HOType::*executeHO)(Mobilestation&);
void (HOType::*atfailure)(Mobilestation&);
...
public:
HOfailure(HOType* const);
~HOfailure();
void setHOexeFunction(void (HOType::*fp)(Mobilestation&));
void setFailureFunction(void (HOType::*fp)(Mobilestation&));
...
};
template<class HOType>
inline void HOfailure<HOType>::setHOexeFunction(void (HOType::*fp)(Mobilestation&))
{
executeHO = fp;
}
template<class HOType>
inline void HOfailure<HOType>::setFailureFunction(void (HOType::*fp)(Mobilestation&))
{
atfailure = fp;
}
I'm trying to substitute the private part in class intraHO.h
by
void (intraHO::*execute_HCS_HO)(Mobilestation& aMobile);
void (intraHO::*execute_intraHO)(Mobilestation& aMobile);
void (intraHO::*failure_HCS_HO)(Mobilestation& aMobile);
void (intraHO::*failure_intraHO)(Mobilestation& aMobile);
what produces the appropriating errors in intraHO.cc
I'm not sure if that is the right way to define a pointer to member
function because on Solaris it compiles without problems.
Or there is another reason to overcome the problem. Maybe is a
kind of error due to bad style programming ?
Regards, Iavor.