Pb de class

Signaler
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
Messages postés
13
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
29 décembre 2002
-
salut !!

je suis en train de faire un programme en relation avec mendeleiev.

il se trouve que j'ai fait mon prog comme ceci (avec un squellette similaire) :

#includes

class definitions
{
public :

char temp[255];
init();
}

definition::init()
{
/*Ici, il ya le probleme*/
}

definition def;

etc.....

mon prob est que dans la table de mendeleiev, il y a 109 atomes ou quelquechos comme ca...

bref, si je vuex pas me taper 654 lignes a ecrires, il me faut la class : l'utilité est que je fais des recheches par numero atomique, nom ou symbol..

je voudrais faire come ceci :

definition::init()
{
strcpy(temp[0],"hydrogene");
strcpy(temp[1],"helium");
......
}

2 problemes ce posent : le strcpy ne veut pas faire

strcpy(temp[0],"hydrogene");

mais accepte uniquement :

strcpy(temp,"hydrogene");

second, temp[0] correspond au premier caractere de la phrase contenu dans temp....

mes questions :

comment faire en sorte, que strcpy accepte (temp[0],"hydrogene");
(ou une autre solution)

et comment mettre les 109 atomes dans un tableau(leur noms) ?

voila, donc si vous avez un autre solution... proposez.

5 réponses

Messages postés
117
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
14 janvier 2003
3
salut,

>>2 problemes ce posent : le strcpy ne veut pas
>>faire strcpy(temp[0],"hydrogene");
>>mais accepte uniquement :
>>strcpy(temp,"hydrogene");

normal, "hydrogene" est, bien sur, une chaine de caracteres et temp[0] est un seul caractère.
en effet char temp[255] ne correspond qu'a un seul mot de 255 caracteres.

>>comment faire en sorte, que strcpy accepte
>>(temp[0],"hydrogene");

pas moyen.

>>(ou une autre solution)
>>et comment mettre les 109 atomes dans un >>tableau(leur noms) ?

je te propose cela

typedef struct {
char cNom[30] ; //ou plus
char cSymbol[3];
int iNumero;
} ELEMENT;

class cMendeleiev {
private :
ELEMENT table[109];
public :
void InitTable();
... // autre methode pour acceder aux elements
};

void cMendeleiev::InitTable()
{
strcpy(this->table[0].cNom,"Hydrogene");
strcpy(this->table[0].cSymbol,"H");
this->table[0].iNumero = 1;
...
}

Mais a mon avis j'utiliserai plutot un fichier avec un boucle for.
Messages postés
17
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
7 avril 2004

Géant Vert

Salut,
Pourquoi n'utilises tu pas un tableau de string :
string temp[255];

comme ça dans init() tu peux ecrire
temp[0]="hydrogène";
temp[1]="helium";
...

A++
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008

merci a toi jecchi pour ta methode qui me semble pro. mais je ne sais pas a quoi sert this et comme je ne veux pas recopier betement un code sans le comprendre.....

je vais essayer de le refaire et voir si je peux l'utilisé.

sinon, je prendrai la solution de geantvert.

merci a tous deux.
Messages postés
16
Date d'inscription
dimanche 10 février 2002
Statut
Membre
Dernière intervention
17 janvier 2004

bon voila xs, this est utilise ds la definition des methodes de la classe seulement.this est un pointeur sur l'objet de la classe, c'est tout, tu p ne pas l'utiliser.Sinon pour le reste, jcecchi t'a bien repondu, il n'ya pas moyen de mettre une chaine de caracteres ds un caractere, a moins de faire un cast et de perdre les autres caracteres qui suivent, ie que tu recopies juste le premier caractere de ta chaine.Voila,tu connais les classes, donc tu p t'en sortir pour le reste.
seul le C/C++ vaut la peine d'etre appris.
tafiscobar.
Messages postés
13
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
29 décembre 2002

Tu as juste fais une erreur dans la declaration de ton tableau, tu as definit un tableau a une dimension de 255 caracteres, tu aurais du utiliser pour ton probleme un tableau a deux dimensions, si ton tableua ne doit que contenir les noms,
voila la declaration char temp[654][255];
Pour initialise ton tableau en une fois tu peux faire
temp[654][255]={"hydrogene","helium",.....};
mais pour le faire dans une classe tu devras utiliser une allocation dynamique pour ton tableau