Bonjour,

Je vais vous exposer mon problème en essayant de simplifier au plus les choses.

Je dispose d'une classe Element :
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*);
};
Ensuite je voudrais pouvoir créer une liste d'élément de taille variable.
Je fais un petit test:
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";
}
Bingo, comme prévu s'affiche à l'écran :
NOM1
NOM2
NOM3
NOM4


Etape2 je veux lire un fichier DTD est récupérer le nom des différents éléments présents.
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)>
]>
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
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();
Cette fois s'affiche à l'écran :
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.