Operateur + (string)

Résolu
Signaler
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Bonjour,

Je voulais faire un code du genre :
#include 
#include <string>
using namespace std;

int main()
{
    string test = "a" + "b";
    cout << test << endl;
    return 0;
}


Mais il ne voulait pas compiler à cause de l'erreur :
invalid operands of types `const char[2]' and `const char[2]' to binary `operator+'


J'ai donc décider de redéfinir l'opération d'addition de la sorte :
string operator+(char* chaine1, char* chaine2)
{
    string nouvelleChaine = chaine1;
    nouvelleChaine += chaine2;
    return nouvelleChaine;
}


Mais il ne compile pas et génère une autre erreur :
`std::string operator+(char*, char*)' must have an argument of class or enumerated type


Avez-vous des suggestions à part ne pas faire "a" + "b" ?
S'il faut réimplémenter la classe string ou en modifier l'en-tête ça ne me gène pas du moment que ça fonctionne.

Merci d'avance et bonne prog,
@++,

Victor

5 réponses

Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Tu peux redéfinir un comportement pour une interaction type personnalisé + type primitif, mais pas type primitif + type primitif.

C'est une question de logique. Que se passerait-t-il si tu essayait de redéfinir l'opérateur + entre deux entiers ? ;)
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Moi aussi, je suis largué, j'ai repris du code, il y a :
string test = "a" + "b";


ca compile, j'ai tenté pareil ca m'a fait une erreur : "cannot add two pointers"

J'ai fini par faire :
std::string test("a");
test += "b";
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
C'est normal.

Ca devrait fonctionner comme ceci:

std::string test = std:string("a") + std::string("b");


ou encore comme cela:

std::stringstream ss;
ss << "a" << "b";
std:string test = ss.str();


`std::string operator+(char*, char*)' must have an argument of class or enumerated type


Ici, le message est clair, il veut au moins une classe dans ses arguments, et non uniquements des types primitifs.

As-tu essayer de redéfinir l'operateur : "operator+=(const std::string& s1, char* s2);" ?
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
Bonjour,

Si j'ai bien compris il est et sera toujours impossible de faire un
string test = "a" + "b";

parce que ce sont des types primitifs et qu'on ne peut pas redéfinir un opérateur même en portée global pour un type primitif ?

Merci et bonne prog,
@++

Victor
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
Bonjour,

Tu pourrais par exemple faire une classe de gestion des nombres entier et retourner directement son résultat avec le type de ta classe.

Merci et bonne prog,
@++

Victor