Disons que j'ai cette classe:Comment résoudre la surcharge de fonction ambiguë en raison de constructeur par défaut dans le paramètre
class Foo {
public:
void member(std::string s);
void member(int64_t &n);
};
Maintenant, je veux faire quelque chose comme
int64_t value = 5;
Foo f;
f.member(value);
Le problème est que le compilateur (au moins GCC) est confus & estime que j'essaie d'appeler membre avec une chaîne en utilisant le constructeur char *:
invalid conversion from 'int64_t' to 'const char*
Comment appeler la fonction membre actuelle sans modifier la signature de la méthode? Les templates sont-ils la seule solution? J'ai essayé de lancer sans aide (ce qui ne devrait pas avoir d'importance puisque le type est déjà sans ambiguïté).
Désolé - trouvez l'erreur.
La déclaration a été:
class Foo {
public:
void member(std::string s);
void member(int64_t &n);
};
Retrait de la sous-ref résolu.
Je ne peux pas reproduire l'erreur avec GCC 3.3, 4.2 ou 4.4 sur Ubuntu ni avec GCC 3.4 sur Solaris 10. –
Vous avez raison - pour une raison quelconque, mes tentatives de réduire à un cas simple ont échoué. C'était une erreur de compilateur avec mon code réel cependant - peut-être que j'ai manqué quelque chose d'autre. – Vitali
Maintenant avec le changement de 'int64_t &' cela n'a plus de sens pour moi pourquoi il ne devrait pas compiler. –