Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux
méthodes de même nom mais de parametres differents (unsigned int et const
char *). Elle servent a recuperer un element dans un tableau soit par
l'index, soit par le nom : classique. Sauf que VC7 renvoi error C2666:
'CMaClass::GetElement' : 2 overloads have similar conversions.
à chaque appel GetElement((unsigned int) 0);
(le type est explicitement precisé a chaque appel pour eviter toute
ambiguité (0 = NULL)).
Comment eviter ça ?
Les protos sont:
CElement *GetElement(unsigned int naIndex) const;
CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
--
« Always look at the bright side of the life... »
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Luc Hermitte
Salut,
Thierry wrote in news::
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux méthodes de même nom mais de parametres differents (unsigned int et const char *). [...] Les protos sont: CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
Tu peux peut-être tenter de rajouter un paramètre à l'une des deux pour lever l'ambiguité ou donner des noms différents.
Ou alors plus simplement, utiliser un type chaine (genre std::string) pour ton paramètre au lieu des pointeurs. Comme cela le 0 partira sur l'entier et non sur le pointeur. Pour le reste, tu auras des convertions implicites (automatiques) entre "const char *" et std::string.
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
Je mets le fu2 sur fclc++, vu que les question sur l'implémentation du standard par tel ou tel compilateur y sont "autorisées"
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Salut,
Thierry <yarglah@com.invalid> wrote in
news:XnF951979F2CBF1pouletetcetc@212.27.42.72:
Je suis en train de migrer un projet vers VC7. Pb : une classe possede
deux méthodes de même nom mais de parametres differents (unsigned int
et const char *). [...]
Les protos sont:
CElement *GetElement(unsigned int naIndex) const;
CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
Tu peux peut-être tenter de rajouter un paramètre à l'une des deux pour
lever l'ambiguité ou donner des noms différents.
Ou alors plus simplement, utiliser un type chaine (genre std::string)
pour ton paramètre au lieu des pointeurs. Comme cela le 0 partira sur
l'entier et non sur le pointeur.
Pour le reste, tu auras des convertions implicites (automatiques) entre
"const char *" et std::string.
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
Je mets le fu2 sur fclc++, vu que les question sur l'implémentation du
standard par tel ou tel compilateur y sont "autorisées"
--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux méthodes de même nom mais de parametres differents (unsigned int et const char *). [...] Les protos sont: CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
Tu peux peut-être tenter de rajouter un paramètre à l'une des deux pour lever l'ambiguité ou donner des noms différents.
Ou alors plus simplement, utiliser un type chaine (genre std::string) pour ton paramètre au lieu des pointeurs. Comme cela le 0 partira sur l'entier et non sur le pointeur. Pour le reste, tu auras des convertions implicites (automatiques) entre "const char *" et std::string.
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
Je mets le fu2 sur fclc++, vu que les question sur l'implémentation du standard par tel ou tel compilateur y sont "autorisées"
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Thierry
Bonjour,
Luc Hermitte a écrit :
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux méthodes de même nom mais de parametres differents (unsigned int et const char *). [...] Les protos sont: CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
Tu peux peut-être tenter de rajouter un paramètre à l'une des deux pour lever l'ambiguité ou donner des noms différents.
C'est ce que je voulais justement eviter :-) Mais bon, la méthode const char * n'etant finalement pas beaucoup utilisée c'est ce que je vais faire...
Ce qui est etonnant c'est qu'il n'y a pas d'ambiguité puisque cast explicite en unsigned int et que ça compile si j'y passe une variable declarée en uint. Plus enervant : il ne reagit pas si on lui passe un 0 pas casté alors que dans ce cas là le compilo devrait demander qu'on lève l'ambiguité.
Ce changement de comportement est repertorié: http://minilien.com/?x6SXpShRm5 par contre la solution preconisée (Explicitly cast one or more of the actual parameters) correspond deja au code existant :-(
-- « Always look at the bright side of the life... »
Bonjour,
Luc Hermitte a écrit :
Je suis en train de migrer un projet vers VC7. Pb : une classe possede
deux méthodes de même nom mais de parametres differents (unsigned int
et const char *). [...]
Les protos sont:
CElement *GetElement(unsigned int naIndex) const;
CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
Tu peux peut-être tenter de rajouter un paramètre à l'une des deux pour
lever l'ambiguité ou donner des noms différents.
C'est ce que je voulais justement eviter :-) Mais bon, la méthode const
char * n'etant finalement pas beaucoup utilisée c'est ce que je vais
faire...
Ce qui est etonnant c'est qu'il n'y a pas d'ambiguité puisque cast
explicite en unsigned int et que ça compile si j'y passe une variable
declarée en uint. Plus enervant : il ne reagit pas si on lui passe un 0
pas casté alors que dans ce cas là le compilo devrait demander qu'on lève
l'ambiguité.
Ce changement de comportement est repertorié:
http://minilien.com/?x6SXpShRm5
par contre la solution preconisée
(Explicitly cast one or more of the actual parameters) correspond deja au
code existant :-(
--
« Always look at the bright side of the life... »
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux méthodes de même nom mais de parametres differents (unsigned int et const char *). [...] Les protos sont: CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
Tu peux peut-être tenter de rajouter un paramètre à l'une des deux pour lever l'ambiguité ou donner des noms différents.
C'est ce que je voulais justement eviter :-) Mais bon, la méthode const char * n'etant finalement pas beaucoup utilisée c'est ce que je vais faire...
Ce qui est etonnant c'est qu'il n'y a pas d'ambiguité puisque cast explicite en unsigned int et que ça compile si j'y passe une variable declarée en uint. Plus enervant : il ne reagit pas si on lui passe un 0 pas casté alors que dans ce cas là le compilo devrait demander qu'on lève l'ambiguité.
Ce changement de comportement est repertorié: http://minilien.com/?x6SXpShRm5 par contre la solution preconisée (Explicitly cast one or more of the actual parameters) correspond deja au code existant :-(
-- « Always look at the bright side of the life... »
Thierry
Bonjour,
J'avais pas vu le message en entier dans l'output: "while trying to match the argument list '(unsigned int)' note: qualification adjustment (const/volatile) may be causing the ambiguity"
Declarer les deux méthode const résoud le problème. CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName) const;
-- « Always look at the bright side of the life... »
Bonjour,
J'avais pas vu le message en entier dans l'output:
"while trying to match the argument list '(unsigned int)'
note: qualification adjustment (const/volatile) may be causing the
ambiguity"
Declarer les deux méthode const résoud le problème.
CElement *GetElement(unsigned int naIndex) const;
CElement *GetElement(const char *szaElementName) const;
--
« Always look at the bright side of the life... »
J'avais pas vu le message en entier dans l'output: "while trying to match the argument list '(unsigned int)' note: qualification adjustment (const/volatile) may be causing the ambiguity"
Declarer les deux méthode const résoud le problème. CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName) const;
-- « Always look at the bright side of the life... »
Horst Kraemer
On 01 Jul 2004 09:58:09 GMT, Thierry wrote:
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux méthodes de même nom mais de parametres differents (unsigned int et const char *). Elle servent a recuperer un element dans un tableau soit par l'index, soit par le nom : classique. Sauf que VC7 renvoi error C2666: 'CMaClass::GetElement' : 2 overloads have similar conversions. à chaque appel GetElement((unsigned int) 0); (le type est explicitement precisé a chaque appel pour eviter toute ambiguité (0 = NULL)).
Comment eviter ça ?
Les protos sont: CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
Il s'agit d'un problème de VC 7. Selon la norme de C++ il n'y pas d'ambiguité pour l'appel
GetElement((unsigned)0);
Il y en aurait cependant pour l'appel
GetElement(0);
parce que le type de 0 est int et il y a une ambiguité entre les conversions
int -> unsigned int int -> char*
qui ont le même "poids" selon les régles de surcharge. Dans le premier cas le type de l'argument est identique au type du paramètre d'une version de la fonction. Donc l'autre version n'est pas considérée.
Je ne peux pas reproduire ton problème avec VC 6. Ici
GetElement((unsigned int)0)
compile sans erreur.
-- Horst
On 01 Jul 2004 09:58:09 GMT, Thierry <yarglah@com.invalid> wrote:
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux
méthodes de même nom mais de parametres differents (unsigned int et const
char *). Elle servent a recuperer un element dans un tableau soit par
l'index, soit par le nom : classique. Sauf que VC7 renvoi error C2666:
'CMaClass::GetElement' : 2 overloads have similar conversions.
à chaque appel GetElement((unsigned int) 0);
(le type est explicitement precisé a chaque appel pour eviter toute
ambiguité (0 = NULL)).
Comment eviter ça ?
Les protos sont:
CElement *GetElement(unsigned int naIndex) const;
CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
Il s'agit d'un problème de VC 7. Selon la norme de C++ il n'y pas
d'ambiguité pour l'appel
GetElement((unsigned)0);
Il y en aurait cependant pour l'appel
GetElement(0);
parce que le type de 0 est int et il y a une ambiguité entre les
conversions
int -> unsigned int
int -> char*
qui ont le même "poids" selon les régles de surcharge. Dans le premier
cas le type de l'argument est identique au type du paramètre d'une
version de la fonction. Donc l'autre version n'est pas considérée.
Je ne peux pas reproduire ton problème avec VC 6. Ici
Je suis en train de migrer un projet vers VC7. Pb : une classe possede deux méthodes de même nom mais de parametres differents (unsigned int et const char *). Elle servent a recuperer un element dans un tableau soit par l'index, soit par le nom : classique. Sauf que VC7 renvoi error C2666: 'CMaClass::GetElement' : 2 overloads have similar conversions. à chaque appel GetElement((unsigned int) 0); (le type est explicitement precisé a chaque appel pour eviter toute ambiguité (0 = NULL)).
Comment eviter ça ?
Les protos sont: CElement *GetElement(unsigned int naIndex) const; CElement *GetElement(const char *szaElementName);
(Le projet doit rester compatible VC6)
[Xpost, je ne sais pas si c'est un probleme lié a VC7 ou au C++]
Il s'agit d'un problème de VC 7. Selon la norme de C++ il n'y pas d'ambiguité pour l'appel
GetElement((unsigned)0);
Il y en aurait cependant pour l'appel
GetElement(0);
parce que le type de 0 est int et il y a une ambiguité entre les conversions
int -> unsigned int int -> char*
qui ont le même "poids" selon les régles de surcharge. Dans le premier cas le type de l'argument est identique au type du paramètre d'une version de la fonction. Donc l'autre version n'est pas considérée.
Je ne peux pas reproduire ton problème avec VC 6. Ici