J'ai des problemes de conflit avec des constructeurs d'une meme classe en C++ et j'utilise WinDevC++.à l'aide
//Je suis entrain de construire une classe E_A qui doit pouvoir //etre initialisé avec un nombre, ou une chaine de type char* ou
// avec une instance de dejà existente de la meme classe. J'ai donc defini les trois constructeurs correspondants, ainsi que le constructeur par defaut, mais aussi le constructeur de copie. Mais les initialisations a partir des nombre et des chaines posent problemes. voici tout le code :
char* intToCharPter(long i) // ecriture d'un long dans un char* convertion long
--> char*
{
string st;
IntToString(st,i);
char *res=NULL;
res=copy(st);
return res;
}
char* intToCharPter(double i) // ecriture d'un double dans un char* convertion double --> char*
{
string st;
doubleToString(st,i);
char *res=NULL;
res=copy(st);
return res;
}
//--------------------- debut de classe E_A ----------------------------------------...
struct E_A
{
char* exp;
static char control ;
char* value()
{ char *p=copy(exp);
return p ;
}
void afficher(){cout << exp<< endl ; }
//les constructeurs
E_A(void) //construct par defaut;
{ exp="0";
}
E_A( char* chaine) // construction a partir d'une chaine
{ if(!chaine) exp="0";
else
if(!strlen(chaine))exp="0";
else exp=copy(chaine );
}
E_A(double nombre) //constuction à partir d'un nombre.
{
string tab;
doubleToString(tab,nombre) ;
exp=copy(tab);
}
E_A(E_A& Exp) //constructeur de copie
{
exp=copy(Exp.exp) ;
}
//surcharche des operateurs
void operator=(E_A& e1)
{ if(exp) delete[] exp ;
exp=copy(e1.exp);
cout << "On est dans la redefinition de = " << endl ;
}
void operator=(const char* e1)
{ if(exp) delete[] exp ;
exp=copy(e1) ;
cout << "On est dans la redefinition de = pour un char* " << endl ;
}
//le destructeur
~E_A()
{ delete[] exp ;
}
} ;
char E_A::control=1 ; //on contole toute affectation ;
//----------------fin de classe E_A-------------------------------------...
int main()
{
E_A E ; //ici il n'ya aucun probleme.
E_A F = E ; // ici non plus
// ICI EST LE PROBLEME.
// AUCUNE DES 3 INITIALISASATIONS SUIVANTES NE MARCHE. POURQUOI ?
//Win Dev C++ me dit qu'il ya 3 candidats possibles dans chaque cas.
// E_A::EA(E_A& ) , E_A:E_A(double) , E_A::EA(char*)
// Normalement, WinDevC++ devrait pouvoir choisir le bon constructeur
// Mais Dev C++ ne le fait pas et m'affiche une erreur.
//comment puis-je resoudre le probleme ? Les trois constructeurs sont
//absolument necessaires pour la classe;
E_A G = 354.5 ; // Il proteste ici, alors que E_A::E_A(double) devrait etre appelé non ?
E_A H="x+y" ; //il proteste ici aussi, alors que E_A::E_A(char*) devrait etre appelé non ?
manyim dit : //comment puis-je resoudre le probleme ? Les trois constructeurs sont
//absolument necessaires pour la classe;
C'est peut être ça le problème hihi... il te faut une class...
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
tu en es où ? tu as réussi ou abandonné ?
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........