Salut à tous
Pour mon apprentissage, je fais quelques petits tests par curiosité. Actuellement, je me retrouve avec un comportement du constructeur de conversion que je n’arrive pas à expliquer. Le bout de code est le suivant :
#include <iostream>
#include <string>
class joueur {
public :
joueur(std::string);
std::string _nom;
};
joueur::joueur(std::string n ): _nom(n) {
std::cout << "In Constructor: nom = " << _nom << std::endl;}
class complexe {
int reel;
int imag;
public:
complexe(int a, int b) : reel(a), imag(b) {}
/*explicit*/ complexe(int a) : reel(a), imag(0) {}
void affiche () {std::cout << "[ "<< reel<< " " << imag << "]" <<std::endl ;}
};
int main() {
complexe c1 (2,3);
c1.affiche();
c1 = 6;
c1.affiche();
c1 = 'c';
c1.affiche();
complexe c2{'5', '9'};
c2.affiche();
complexe c3{-20};
c3.affiche();
complexe c4{'5'};
c4.affiche();
joueur joueur_1{"pierre"};
std::cout << "joueur_1.nom = " << joueur_1._nom << std::endl;
joueur_1 = 5;
std::cout << "joueur_1.nom = " << joueur_1._nom << std::endl;
std::string n{"bonjour"} ;
n = 5;
joueur joueur_2{32};
std::string n2{26} ;
return 0;
}
La ligne 43 renvoie l’erreur error: no match for 'operator=' (operand types are 'joueur' and 'int')
alors que la ligne 29 passe sans avertissement. Quant à la ligne 49, elle renvoie l’erreur error: no matching function for call to 'joueur::joueur()
alors que la ligne 51 elle aussi compile sans avertissement.
Je voudrais s’il vous plaît savoir pourquoi est ce qu’avec la classe joueur
la conversion de type n’est pas possible ?
J’utilise VS Code avec le compilateur mingw64 version 12.2.0
Merci d’avance pour vos retours
+0
-0