J'ai une classe symbol_table qui a un vecteur d'objets d'une autre classe row_st.also j'ai aussi une méthode enter où insère des objets de row_st avec un nom passé dans le vecteur de la table de symboles désirée .mais quand j'appelle l'entrée pour entrer des objets avec le nom: a; b; c; j'obtiendrai le résultat suivant: a, b, c; b, c; c.le premier élément du vecteur obtient le nom de tous les entrés objets. et le deuxième élément reçoit également le nom des entrées ultérieures.C++ push_back ne fonctionne pas comme il est supposé
class row_st
{
public:
char* name;
type_u type;//int:0,flaot:1;char:2,bool:3,array:
int offset;
symbol_table *next;
symbol_table *current;
};
class symbol_table
{
public:
vector <row_st *> row;
int type;
int header;
int starting_stmt;
int index;
int i;
symbol_table *previous;
symbol_table(){ header=0;
previous=0; index=0;i=0;starting_stmt=0;}
};
et voilà la méthode entrez:
int enter(symbol_table *table,char* name,type_u type){
row_st *t=new row_st;
t->name=name;
t->type=type;
t->offset=table->index;
t->current=table;
table->index++;
t->next=0;
table->row.push_back(t);
table->header +=1;
return table->row.size()-1;
}
les éléments push_backed tous points à la même adresse.Système nouvel appel fait la même row_st chaque fois qu'il est called.what dois-je faire?
Veuillez enlever toutes les lignes blanches inutiles de votre code - elles le rendent très difficile à lire. –
Pourriez-vous nous montrer exactement comment vous appelez le code ci-dessus? Je suppose que vous devez copier les chaînes que vous passez, soit du côté appelant, soit à l'intérieur de enter. –