push_back
копирует новые элементы.Если вы хотите делать то, что вам, кажется, нужно, вам нужно хранить указатели на A
, а не просто A
.
По сути, ваш код просто такой:
A element_1(2);
A element_2(4);
std::cout << "Element 1 is equal to " << element_1.data << std::endl;
std::cout << "Element 2 is equal to " << element_2.data << std::endl;
std::cout << "Element 1 is equal to " << element_1.data << std::endl;
std::cout << "Element 2 is equal to " << element_2.data << std::endl;
system("pause");
return 0;
Все что связано с B
не работает.Попробуйте это:
class B {
public:
// A function that adds a new 'A' object to the vector in class b
void push_back_to_vector(A *element);
// A function that changes the data of the objects stored in vector_of_a
void add_to_vector();
// A vector to hold objects of A
std::vector<*A> vector_of_a;
};
void B::push_back_to_vector(A* element) {
vector_of_a.push_back(element);
}
void B::add_to_vector() {
for (size_t i = 0; i < vector_of_a.size(); i++) {
// Add five to all the elements in the vector
vector_of_a[i]->data += 5;
}
}
И передайте указатели:
b.push_back_to_vector(&element_1);
b.push_back_to_vector(&element_2);
Конечно, помните о времени жизни объектов в стеке, на которые вы указываете в B
.