Je continue a explorer les arcanes de la POO et cela ne va pas sans mal.
Après m´être battu pendant quelques heures avec des problèmes de définition de constructeur de copie qui ne fonctionnait pas du tout je me retrouve face à un autre problème :
Il semblerait que la norme ne permette pas de promouvoir une variable x du type X vers le type X& sauf si on essaie de le faire vers le type const X&.
Pourquoi : mon problème c´est justement pour les constructeur de copie de mes classes, j´ai le malheur d´appeler une fonction membres non const de la classe que l´on recopie. Cela ne serait pas génant si je pouvais déclarer le constructeur de copie :
A::A(A&);
Mais si je fait ainsi, VC++ me fait des warning à la compilation comme quoi ce que je fait n´est pas conforme à la norme, et comme pour lui donner raison, Dev C++ refuse carrément de compiler, sur des construction du genre :
class A
{
A(A&);
A f(int);
A g();
};
A::g()
{
return f(5);
}
sur la ligne du return il me dit (avec raison) que je n´ai pas le droit de promouvoir un A en A&.
Mais je crois avoir compris que j´ai le droit donc de convertir un A en const A& et donc qu´il faudrait que je déclare le constructeur de copie avec un argument const. Mais comme je l´ai déjà dit, je modifie un minuscule petit truc dans l´objet appelé.
Alors ma question est : y a-t-il une manière d´éviter de devoir déclarer le constructeur de copie avec un argument const ? parce que ça semble assez artificiel cette interdiction de promouvoir un type en une référence vers ce type, donc il y a peut-être un moyen de la contourner non ?
merci d´avance.