Bonjour,
J'ai développé une classe de chaine dynamique assez complète, il y a des années. La compilation et l'utilisation se passaient très bien jusqu'à ce que je mette à jour mon compilateur (g++). Je ne me suis pas mis à la page, mais le changement des normes C++ me fait aujourd'hui un résultat que je ne comprends pas :
Là, ça marche très bien, ça m'affiche "bonjour Monsieur".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Dynachar d("bonjour"); d=d+" Monsieur"; cout<<d<<endl;
Mais si je fais cela (en inversant le sens) :
Ca ne compile pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Dynachar d("bonjour"); d=d+" Monsieur"; d="Ah, " + d; cout<<d<<endl;
Voici mes prototypes liés à l'exemple ci-dessus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 test.C: In function 'int main(int, char**)': test.C:20: error: ambiguous overload for 'operator+' in '"Ah, " + d' ../lib/Dynachar.h:1488: note: candidates are: Dynachar operator+(const char*, Dynachar&) ../lib/Dynachar.h:1501: note: Dynachar operator+(const char*, Dynachar)
J'ai vu des solutions approchantes qui consistait à forcer un cast, mais je ne suis pas parvenu à les mettre en oeuvre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Dynachar operator + (Dynachar &); //ajoute 2 Dynachar (et retourne 1 Dynachar) Dynachar operator + (Dynachar); //ajoute 2 Dynachar (et retourne 1 Dynachar) Dynachar operator + (const char *); //idem mais entre 1 Dynachar et 1 chaine friend ostream &operator <<(ostream&,const Dynachar&); //permet de faire un << avec un Dynachar friend istream &operator >>(istream&,Dynachar&); //permet de faire un >> avec un Dynachar }; Dynachar operator + (const char *,Dynachar &); //fonction ext. à la classe. Ret. 1 Dynachar Dynachar operator + (const char *,Dynachar); //fonction ext. à la classe. Ret. 1 Dynachar
Merci de votre aide !
Jérôme.
Partager