Problème d'utilisation de vector
Bonjour,
Je vais vous exposer mon problème en essayant de simplifier au plus les choses.
Je dispose d'une classe Element :
Code:
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:
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:
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:
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.