RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Conflit avec des constructeurs d'1 Class

Forum : C++
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ C++

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C++

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
manyim
Nouveau membre
Inscrit : 14/04/2008
Messages : 1
Message
#151919
Posté le 14/04/08 à 21:14
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 :


#include <iostream>
#include <vector>
#include <Math.h>
#include <cstdlib>
#include <string.h>
#include <sstream>
#include <stdio.h>
using namespace std ;




//-------------fonctions utilitaires-----------------------------...


inline char* copy(const char* q) //renvoie la copie de q
{
if(q==NULL) return NULL;

int nbre=(strlen(q))+1 ;
char* p=new char[nbre] ;

strcpy(p,q);
return p;
}


//---------------------- fonctions de convertion vers le type chaine ----------------------------------

inline char* copy( string str) //----- convertion (string --> char*)
{
const char* q=str.c_str();
char* p=NULL;
return p=copy(q);
}


inline void IntToString( string& res , long i) // conversion int --> string
{
ostringstream temp;
temp << i;
res =temp.str( );
}



inline void doubleToString( string& res , double i) // convertion double --> string
{
ostringstream temp;
temp << i;
res = temp.str( );
}



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 ?


system("pause") ;
return 0 ;
}

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

rainbow
Membre du club
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 995
Message
#152103
Posté le 19/04/08 à 11:49
Question toute bête :
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 ..............
......Image
........... TeamMoteurProg...........

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

rainbow
Membre du club
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 995
Message
#152398
Posté le 24/04/08 à 12:51
tu en es où ? tu as réussi ou abandonné ?
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM C++



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.