Я пытаюсь добавить указатели на объект к вектору в функции, как это:Добавление указателей на объекты в векторе
вектор:
vector<struct Node*> vars;
функция:
void fill_vec(){
struct Node* temp;
temp = new Node();
cout << token << endl;
temp->name = token;
temp->value = 0;
cout << temp << endl;
vars.push_back(temp);
}
fill_vec вызывается в цикле while, который останавливается, когда больше нет имен переменных.
Он добавляет правильное количество узлов к вектору, но все указывает на один и тот же объект. Токен анализируется.
выход выше:
a
0x9c6010
b
0x9c6050
печать вектор:
void print_vars(){
for(int i = 0; i < vars.size(); i++){
cout << "Name:" << vars[i]->name << endl;
cout << "Value:" << vars[i]->value << endl;
}
}
выход:
Name:b
Value:0
Name:b
Value:0
Моя мысль в том, что, когда я выделил новую память, адрес изменится. Когда я печатаю адрес temp каждый раз, когда я вызываю функцию, адрес тот же. Я неправильно печатал адрес. Адрес для каждого вызова функции отличается. Заранее спасибо за помощь.
Можете ли вы создать [минимальный, завершающий и проверяемый пример] (http://stackoverflow.com/help/mcve)? –
Невозможно сделать какие-либо предложения на основании ограниченной информации. – user4581301
'vector' выглядит как C с классами. Сделайте это 'vector '. –