sirve que push_back para c++ class vector push-back

c++ - que - Actualización del vector de objetos de clase utilizando push_back en varias funciones



push_back c++ para que sirve (2)

Tengo un vector de objetos de clase que he creado en main leyendo en un archivo de datos. Estoy pasando el vector a varios archivos diferentes que contienen funciones que realizan diferentes operaciones en el vector (ordenando por diferentes campos, restando inventario, etc.). Me encuentro con un problema cuando trato de usar push_back para agregar al vector en otro archivo (que es parte del mismo proyecto) después de que ya se haya creado. El vector preexistente se pasa a la función y el vector se agrega con éxito dentro de la función, pero cuando salgo de la función, el registro agregado ya no está allí y, por lo que yo sé, debería acceder a la actualización. vector después de ese punto adelante de todas mis diferentes funciones en diferentes archivos, ¿verdad? No debería tener que pasar el vector actualizado si es el mismo nombre que el que creé en main, ¿o sí? Estoy seguro de que el lenguaje y la terminología que uso son incorrectos (y no dude en corregirme), pero es casi como si el vector no se actualizara globalmente y solo se actualizara localmente dentro de la función mientras dure su llamada .

Esta es la definición de la función y el código dentro de la función que estoy usando donde quiero agregar al vector (estoy omitiendo todas las asignaciones de parámetros variables por razones de brevedad). Todas las funciones a las que me refiero son las funciones del colocador dentro de la clase, y antes de este punto, el vector ya contiene 20 registros y se configuró de manera similar a la función siguiente.

void addBook(vector<BookData> books) { BookData *books1; books1 = new BookData; books1->setTitle(bookTitle); books1->setAuthor(author); books1->setPub(publisher); books1->setIsbn(isbn); books1->setWholesale(wholesale); books1->setRetail(retail); books1->setQty(qtyOnHand); books1->setDateAdded(dateAdded); books.push_back(*books1); }

No quise inundar la publicación con demasiado código pero puedo publicar más si sería útil. Solo quiero que las adiciones (o eliminaciones que hago en otra función) sean accesibles durante todo el programa.


Debería pasar el vector por referencia para modificar el vector global original.

void addBook(vector<BookData>& books) ^^^

De lo contrario, está pasando una copia del vector original a la función y modificando esa no la versión global.


Necesita pasar su vector como referencia cuando sea necesario. En esa instancia específica, solo necesitas cambiar

void addBook(vector<BookData> books)

a:

void addBook(vector<BookData>& books)

de lo contrario, su función obtiene una copia del vector, no una referencia al original.