no matching function for call to ...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux