Demande conseil class

Résolu
silverfr78021959 Messages postés 45 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 30 novembre 2005 - 12 nov. 2005 à 20:45
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 13 nov. 2005 à 16:19
salut as tous
je voudrais faire la meme chose que le programme montré ci-dessous, sauf que lamap<string... je voudrais le déclarer dans une class, dans un fichir config.h est-ce possible.
Et comment je peu acceder au valeur contenu dans ma map a partir de n'importe qu'elle autre fonction .

#include
#include <string>
#include <map>
#include <fstream>
using namespace std;
//------------------------------------------------------------------------------
int main()
{
map<string, string> conf;
map<string, string>::iterator it;


char buffer[100];
string param, val;
ifstream file("C:\Dev-Cpp\develop\fichier.txt");
if(!file.is_open()) return 1;
//ignore the first line
file.getline(buffer,100);
bool last = file.eof();
int cpt=0;
file.getline(buffer,100,':');
while(!file.eof())
{
//read parameters name
param = buffer;
//read parameters values
file.getline(buffer,100, ';');
val = buffer;
file.getline(buffer,100);


//save the data into the structure
conf[param] = val;
//read the next line
file.getline(buffer,100,':');


}
file.close();
for (it = conf.begin(); it != conf.end(); it++)
cout << '<' << it->first << ", " << it->second << '>' << endl;
system("PAUSE");
return 0;
}

11 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2005 à 16:19
configData::conf est accessible depuis n'importe quel endroit, puisque c'est une variable de classe statique
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 nov. 2005 à 21:59
Rien compris a ton problème... Bien sur qu'on peut mettre une map dans une classe
0
silverfr78021959 Messages postés 45 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 30 novembre 2005
13 nov. 2005 à 00:21
Ben justement la je voudraias la map qui est au debut de programe sans uneclass mise dansun fichier confi.h et on l'appelle a partir du fichier config.cpp qui fais le traitement comme ci-dessus.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2005 à 00:50
Franchement je crois que tu expliques très mal ton problème, en tous cas je comprends pas. Si tu pouvais te relire et écrire une phrase correcte, ce serait plus simple
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
silverfr78021959 Messages postés 45 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 30 novembre 2005
13 nov. 2005 à 01:11
oui c'est vrai escuse moi, en faite je voudrais mettre map<string, string> conf; dansune class appelé configData par exemple. Cette class serais dans une page config.h. Une autre page config.cpp contiendrais le code suivant :

<!--StartFragment--><LINK href="/cppcs.ico" rel="SHORTCUT ICON">




<FORM id=aspnetForm name=aspnetForm onsubmit="javascript:return WebForm_OnSubmit();" action=forum.v2.aspx?ID=599101 method=post>
<TABLE id=ctl00_Main_UCContentForum_ctl00_DGMsg style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; WIDTH: 100%; BORDER-BOTTOM: silver 1px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: white" cellSpacing=0 cellPadding=3 rules=all border=1>

----,

<!--StartFragment-->
map<string, string>::iterator it;

char buffer[100];
string param, val;
ifstream file(\"C:\Dev-Cpp\develop\fichier.txt\");
if(!file.is_open()) return 1;
//ignore the first line
file.getline(buffer,100);
bool last = file.eof();
int cpt=0;
file.getline(buffer,100,':');
while(!file.eof())
{
//read parameters name
param = buffer;
//read parameters values
file.getline(buffer,100, ';');
val = buffer;
file.getline(buffer,100);

//save the data into the structure
conf[param] = val;
//read the next line
file.getline(buffer,100,':');

}
file.close();
for (it = conf.begin(); it != conf.end(); it++)
cout << '<' << it->first << \", \" << it->second << '>' << endl;
system(\"PAUSE\");

<!--EndFragment-->
</TD>

De la je voudrais accéder à la map a partir de n'importe quel autre fichier par exemple traitement.cpp. qui fais parti de mon programme.
je pense avoir était plus claire merci

</TD></TR></TBODY></TABLE></FORM>
<!--EndFragment-->
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2005 à 12:32
OK. Pour commencer, si tu le mets dans une classe, et si tu veux y accéder partout, tu as besoin de le mettre en static (sinon il te faudra un objet).

Dans config.h:
class configData
{
public:
static map<string, string> conf;
...
};

Dans config.cpp:
map<string, string> configData::conf;

et dans ton fichier principal:
#include "config.h"
ici tu accède à la map avec configData::conf


Voila, mais pourrais tu expliquer tes motivations de vouloir mettre conf dans une classe?

Autre chose dans ton code:
ifstream file("C:\Dev-Cpp\develop\fichier.txt");
doit être remplacé par
ifstream file("C:\\Dev-Cpp\\develop\\fichier.txt");
0
silverfr78021959 Messages postés 45 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 30 novembre 2005
13 nov. 2005 à 14:18
voici se que j'ai fais mais marche pas top top.

Fichier config.h :

#include
#include <map>
using namespace std;
class configData
{
public:


static map<string,string> conf;
int config(string filename);
int display();
};

Fichier config.cpp :

#include "config.h"
#include
#include <string>
#include <map>
#include <fstream>


using namespace std;
//------------------------------------------------------------------------------
#define VALUE_NOT_SPECIFIED 0


map<string, string> configData::conf;


int configData::config(string filename)
{

char buffer[100];
string param, val;
ifstream file(filename.c_str());
if(!file.is_open()) return 1;
//ignore the first line
file.getline(buffer,100);
bool last = file.eof();
int cpt=0;
file.getline(buffer,100,':');
while(!file.eof())
{
//read parameters name
param = buffer;
//read parameters values
file.getline(buffer,100, ';');
val = buffer;
file.getline(buffer,100);

//save the data into the structure
conf[param] = val;
//read the next line
file.getline(buffer,100,':');
}
file.close();
return 0;
}


int configData::display()
{
map<string, string>::iterator it;

for (it = conf.begin(); it != conf.end(); it++)
cout << '<' << it->first << ", " << it->second << '>' << endl;
cout << "essai :" << conf["fichier"] << endl;
return 0;
}

fichier principal :

#include "config.h"
#include
#include <stdlib.h>


using namespace std;
configData conf;


int main(int argc, char *argv[])
{

conf.config("C:\\Dev-Cpp\\develop\\fichier.txt");
conf.display();

return 0;
}

voilà si vous pouvezme dire o cela coince. Merci
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2005 à 14:47
A toi de dire ou a coince, quelle est l'erreur?
0
silverfr78021959 Messages postés 45 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 30 novembre 2005
13 nov. 2005 à 15:28
Justement si je suis ici c'est que je sais pas lol, a toi de me dire jepense que cela vient de ca conf.config("C:\\Dev-Cpp\\develop\\fichier.txt");
conf.display();

il me met pas de message d'erreur, juste que ca lance la console et refaerme aussi tot.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2005 à 15:47
Ca c'est normal, ajoute un system("PAUSE"); à la fin sinon tu n'a pas le temps de voir ce qui est écrit.
Ensuite pour savoir d'ou vient le problème, ajoute des traces dans la console. Par exemple:
ifstream file(filename.c_str());
if(!file.is_open())
{
cout << "Impossible d'ouvrir le fichier" << endl;
return 1
}

Puis tu peux afficher directment chaque ligne lue, ainsi tu verra rapidement s'il y a un problème de lecture.
Si tu as un debugger, ce serait intéressant de l'utiliser
0
silverfr78021959 Messages postés 45 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 30 novembre 2005
13 nov. 2005 à 16:01
okoi mon programme foncitonne, il fallait mettre just le system pause.
Juste une derniere question pour ma culture genérale si par exemple je veux récupere une valeur stocker dans ma map ex : conf["Alt"]; à partir d'une autre fonction je fais comment.
0
Rejoignez-nous