Operateur + (string)

Résolu
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 22 sept. 2009 à 21:11
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 23 sept. 2009 à 20:52
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 sept. 2009 à 16:08
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 ? ;)
1
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
23 sept. 2009 à 08:59
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";
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 sept. 2009 à 13:01
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);" ?
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
23 sept. 2009 à 16:03
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
23 sept. 2009 à 20:52
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
0
Rejoignez-nous