Le second bit est infiniment récursive:
struct X2 : X
{
void my_func(char value) { my_func(value); } //calls itself over and over again
};
Prefix my_func
avec le nom de la classe de base et vous serez OK
struct X2 : X
{
void my_func(char value) { X::my_func(value); }
};
EDIT juste réalisé que la classe de base
my_func
' s signature est différente. Le compilateur C++ résout statiquement la surcharge de la fonction, c'est-à-dire qu'il choisit la fonction qui correspond le mieux au type de l'argument, c'est pourquoi il appelle la surcharge
char
.
Par exemple:
char cChar = 'a';
myfunc(cChar);
void myfunc(char a){} //<-- this one is called
void myfunc(int a){}
int iInt = 1;
myfunc(iInt);
void myfunc(char a){}
void myfunc(int a){} //<-- this one is called
Merci Charles Bailey. Le code ci-dessus ne s'applique pas dans ce cas car X2
my_func
cache la classe de base my_func
. Cela laisse la seule solution pour qualifier la fonction avec le nom de la classe.
Il n'y a pas de programme ici, juste deux définitions de classe. Il ne peut pas et ne peut pas accrocher. En fait, il ne peut pas être exécuté. Publiez le code réel que vous essayez d'exécuter. – AnT
La plupart d'entre nous ont été en mesure de remplir les blancs. Dites juste ... –
@Igor Zevaka: Certainement. Mais dans 9 cas sur 10, "remplir les blancs" produit une réponse inutile à une question insignifiante. J'espère que celui-ci se révèle être 1 sur 10 quand ça marche. – AnT