class T {
private:
std::vector<T> myVec;
// ...
public:
T();
T(float x, float y);
std::vector<T> getMyVec() { return myVec; }
// ...
};
//в T.cpp Я не использую myVec каким-либо образом (не в конструкторе)
//в Tmain.cpp:
int main() {
T myT;
std::cout << myT.getMyVec().size() << std::endl; // 0
T anotherT(1.1, 2.2);
myT.getMyVec().push_back(anotherT);
std::cout << myT.getMyVec().size() << std::endl; // 0
}
Надеюсь, я могу пояснить (просто предположим, что мой #include и т.д. Верен):
Таким образом, в основном у меня есть класс T, в котором у меня есть поле частного члена с именем myVec, которое имеет тип std :: vector. У меня также есть функция public (get-) для доступа к этому полю. В основном я создаю себе объект T и распечатаю его myVec.size(). Это нуль, поскольку я еще ничего не сделал с вектором. Я создаю объект anotherT и push_back() в мое векторное поле предыдущего объекта T. Опять же, я распечатываю myVec.size() первого объекта (я ожидаю, что на данный момент он будет равен 1, так как я добавил ему другое. Но он по-прежнему возвращает 0 в качестве своего размера. Почему это? Я делаю так, что он "сохраняет" объекты, которые я пытаюсь добавить к нему?
std::vector<T> getMyVec() { return myVec; }
должно быть
std::vector<T>& getMyVec() { return myVec; }
иначе вы вернете копию своего члена.
Вам нужно вернуть ссылку на свой частный вектор.
std::vector<T>& getMyVec() { return myVec; }
Иначе он вернет копию. И любые изменения, внесенные вами в копию, не повлияют на ваш вектор в классе.
void add_element(float x);
это добавляет элемент к вашему личному вектору.