Ruf einer überladenen Methode aus der Basisklasse

Hinweis

Der folgende Code kann so nicht kompiliert werden, sondern liefert mit dem GCC-Compiler diese Fehlermeldung:

withoutusing.cpp: In function ‘int main()’:
withoutusing.cpp:50: error: no matching function for call to ‘Hund::GibNamenAus()’
withoutusing.cpp:34: note: candidates are: void Hund::GibNamenAus(const char*)

Codebeispiel

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
 
class Tier
{
public:
  char Name[64];
  int  Fellfarbe;
  int  KrallenLaenge;
  int  AnzahlBeine;
 
  inline void GibNamenAus( void ) { printf( "Ich heiße %s\n", Name ); }
 
  Tier( char const * name, int fellfarbe, int krallenLaenge, int beine )
    : Fellfarbe( fellfarbe )
    , KrallenLaenge( krallenLaenge )
    , AnzahlBeine( beine )
  {
    int laenge = strlen( name );
    if( laenge > 63 ) laenge = 63;
 
    memcpy( Name, name, laenge );
    Name[ laenge ] = '\0';
  } 
};
 
class Hund : public Tier
{
public:
  int  GefangeneKatzen;
 
  inline void GibLaut( void ) { printf( "Wau!\n" ); }
  inline void GibNamenAus( char const * familyName ) 
  { 
    printf( "Ich heiße %s %s\n", Name, familyName ); 
  }
 
  Hund( char const * name, int fellFarbe, int krallenLaenge, int gefangeneKatzen )
  : Tier( name, fellFarbe, krallenLaenge, 4 /* <- Beine */ )  // Basiskonstruktor für die Klasse Tier
  , GefangeneKatzen( gefangeneKatzen )
  {}
};
 
int main( void )
{
  Hund harry( "Harry", 0x000000 /* Farbe */, 2 /* Krallenlaenge */, 4 /* gefangene Katzen */ );
 
  harry.GibNamenAus();
// harry.Tier::GibNamenAus();  // <- dies würde funktionieren
 
  return EXIT_SUCCESS;
}