On Fri, 04 Jan 2008 17:14:30 +0100, Guillaume GOURDIN :
Oups. Je voulais dire que j'ai l'impression qu'il implémente l'operateur
operator+(const wchar_t*, long int)
Cet opérateur existe bien évidemment, même en C : on peut ajouter un entier à un pointeur pour le déplacer à l'intérieur d'un tableau.
int const t[]= { 1, 2, 3 }; int const* ptr1= t; // ptr1 pointe sur "1" int const* ptr2= ptr1 + 2; // ptr2 pointe sur "3"
Fabien LE LEZ
On Fri, 04 Jan 2008 17:48:11 +0100, Guillaume GOURDIN :
Tout à fait. Tu as une explication ?
L'explication t'a été donnée par le compilateur.
Tu écris s1 + 't';
s1 est de type "my_string", et peut être converti en un wchar_t const*
t est de type "char", et peut être converti en un type numérique (int ou long int)
Il n'y a pas d'opérateur operator+ (my_string, char); ni d'opérateur my_string::operator+ (char);
Il faut donc effectuer une conversion implicite sur les arguments, et regarder les fonctions qui correspondent.
D'après le compilo, deux fonctions correspondent :
error: ambiguous overload for operator+ note: candidates are: operator+(const wchar_t*, long int) <built-in> my_string my_string::operator+(const my_string&) const
Le compilateur ne sachant pas laquelle choisir (aucune règle du langage ne privilégie l'une par rapport à l'autre), il ne peut pas compiler, et renvoie un message d'erreur.
Par contre, si tu écris
s1 - 't';
le programme devrait compiler sans problème :-p
Note que std::string n'a pas d'opérateur de conversion vers "char const*" ; c'est justement pour éviter ce genre de problème.
On Fri, 04 Jan 2008 17:48:11 +0100, Guillaume GOURDIN
<gourdin@liw.fr>:
Tout à fait. Tu as une explication ?
L'explication t'a été donnée par le compilateur.
Tu écris
s1 + 't';
s1 est de type "my_string", et peut être converti en un wchar_t const*
t est de type "char", et peut être converti en un type numérique (int
ou long int)
Il n'y a pas d'opérateur
operator+ (my_string, char);
ni d'opérateur
my_string::operator+ (char);
Il faut donc effectuer une conversion implicite sur les arguments, et
regarder les fonctions qui correspondent.
D'après le compilo, deux fonctions correspondent :
error: ambiguous overload for operator+
note: candidates are: operator+(const wchar_t*, long int) <built-in>
my_string my_string::operator+(const my_string&) const
Le compilateur ne sachant pas laquelle choisir (aucune règle du
langage ne privilégie l'une par rapport à l'autre), il ne peut pas
compiler, et renvoie un message d'erreur.
Par contre, si tu écris
s1 - 't';
le programme devrait compiler sans problème :-p
Note que std::string n'a pas d'opérateur de conversion vers
"char const*" ; c'est justement pour éviter ce genre de problème.
On Fri, 04 Jan 2008 17:48:11 +0100, Guillaume GOURDIN :
Tout à fait. Tu as une explication ?
L'explication t'a été donnée par le compilateur.
Tu écris s1 + 't';
s1 est de type "my_string", et peut être converti en un wchar_t const*
t est de type "char", et peut être converti en un type numérique (int ou long int)
Il n'y a pas d'opérateur operator+ (my_string, char); ni d'opérateur my_string::operator+ (char);
Il faut donc effectuer une conversion implicite sur les arguments, et regarder les fonctions qui correspondent.
D'après le compilo, deux fonctions correspondent :
error: ambiguous overload for operator+ note: candidates are: operator+(const wchar_t*, long int) <built-in> my_string my_string::operator+(const my_string&) const
Le compilateur ne sachant pas laquelle choisir (aucune règle du langage ne privilégie l'une par rapport à l'autre), il ne peut pas compiler, et renvoie un message d'erreur.
Par contre, si tu écris
s1 - 't';
le programme devrait compiler sans problème :-p
Note que std::string n'a pas d'opérateur de conversion vers "char const*" ; c'est justement pour éviter ce genre de problème.