У меня есть статическая функция-член, которая инициализирует Object1, который содержит вектор-член Object2. Object2 имеет вектор-член строк.
Я пытаюсь добавить серию строк в вектор Object2. Используя функцию-член Object2 для вставки строки в вектор, она не поддерживает элементы при каждом вызове функции.
Например, внутри функции каждый раз, когда она нажимает, она печатает, что размер вектора равен 1, хотя он должен увеличиваться каждый раз.
Мне интересно, есть ли какая-то проблема выделения памяти, которая создает это.
Вектор объявлен в определении класса, но не инициализирован в конструкторе.
Учитывая, что вектор пуст, мне неясно, нужно ли его инициализировать в векторе, и если да, то как?
class Object1 {
private:
vector<Object2> container;
}
class Object2 {
protected:
vector<string> container2;
public:
void add_string(string to_be_added)
{
container2.push_back(to_be_added);
cout << container2.size(); // always prints 1
}
}
void object1_static_member_function()
{
Object1 obj1;
//assume container2 is loaded with values
for(Object2 obj2 : obj1.container)
{
obj2.add_string("test string");
obj2.add_string("test string2");
obj2.add_string("test string3");
}
}
Комментируемая строка должна увеличиваться при каждом проходе по одному и тому же вектору объекта, но она всегда равна 1 (предполагая, что это 0 в начале функции, и, следовательно, никогда не будет эффективно сохранять новый элемент)
РЕДАКТИРОВАТЬ: изменение цикла for для доступа по ссылке решило проблему, большое спасибо. Я признаю, что мой вопрос был несколько неясным, поэтому я благодарен комментаторам за помощь в его расшифровке