Bonjour,
Je vais vous exposer mon problème en essayant de simplifier au plus les choses.
Je dispose d'une classe Element :
Ensuite je voudrais pouvoir créer une liste d'élément de taille variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Element { private: char* Name; public: Element(); Element(char*); virtual ~Element(); char* getName(); void setName(char*); };
Je fais un petit test:
Bingo, comme prévu s'affiche à l'écran :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 vector<Element> Table_Element; char* nom="NOM1"; Table_Element.push_back(Element(nom)); nom = "NOM2"; Table_Element.push_back(Element(nom)); nom="NOM3"; Table_Element.push_back(Element(nom)); nom="NOM4"; Table_Element.push_back(Element(nom)); for (int i=0;i<Table_Element.size();i++) { cout << Table_Element[i].getName() << "\n"; }
NOM1
NOM2
NOM3
NOM4
Etape2 je veux lire un fichier DTD est récupérer le nom des différents éléments présents.
Voila la portion de code devant me permettre d'arriver à mon but :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <!DOCTYPE ROOT[ <!ELEMENT NOM1 (#PCDATA)> <!ELEMENT NOM2 (#PCDATA)> <!ELEMENT NOM3 (#PCDATA)> <!ELEMENT NOM4 (#PCDATA)> ]>
Cette fois s'affiche à l'écran :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 ifstream dtd; char c, mot[100], nom[100]; int compteur=0; while(!dtd.eof()) { dtd >> c; //lecture caractere par caractere if (c=='<') //quand le caractere '<' est rencontrer { dtd.get(mot,9); if (!strcmp("!ELEMENT",mot)) //regarder si on a affaire a un element { compteur++; cout << "\n Boucle :" << compteur << "\n"; dtd.get(nom,10,'('); //recuperer le nom de l'element Table_Element.push_back(Element(nom));//ajouter un element au vecteur for (int i=0;i<Table_Element.size();i++) { cout << Table_Element[i].getName() << "\n"; } } } } dtd.close();
Boucle : 1
NOM1
Boucle : 2
NOM2
NOM2
Boucle : 3
NOM3
NOM3
NOM3
etc...
Je ne comprends pas pourquoi est-ce que les noms de tout les élement sont à chaque fois modifier.:
Si quelqu'un a la solution je lui en serai très reconnaissant.
Pour moi la seul différence est que j'utilise non plus un
char* pour construire mon élément mais un char[100].
Si j'utilise la fonction dtd.get(nom,10,'(') et que nom est un char* ca compile, mais au lancement du programme il y a plantage.:
Merci d'avance à ceux qui vont prendre le temps de lire ce message et d'y répondre.
Partager