3 Stimmen

Aktualisierung des Vektors von Klassenobjekten unter Verwendung von push_back in verschiedenen Funktionen

Ich habe einen Vektor von Klassenobjekten, den ich in main erstellt habe, indem ich eine Datei eingelesen habe. Ich übergebe den Vektor dann an mehrere verschiedene Dateien, die Funktionen enthalten, die verschiedene Operationen auf dem Vektor durchführen (Sortieren nach verschiedenen Feldern, Bestandsabzug usw.). Ich stoße auf ein Problem, wenn ich versuche, mit push_back in einer anderen Datei (die Teil des gleichen Projekts ist) zum Vektor hinzuzufügen, nachdem er bereits erstellt wurde. Der vorhandene Vektor wird an die Funktion übergeben und der Vektor wird innerhalb der Funktion erfolgreich hinzugefügt, aber wenn ich die Funktion verlasse, ist der hinzugefügte Datensatz nicht mehr vorhanden, und soweit ich das beurteilen kann, sollte ich ab diesem Zeitpunkt von all meinen verschiedenen Funktionen in verschiedenen Dateien aus auf den aktualisierten Vektor zugreifen können, oder? Ich sollte den aktualisierten Vektor nicht zurückgeben müssen, wenn er den gleichen Namen wie der in main erstellte hat, oder? Ich bin mir sicher, dass die Sprache und Terminologie, die ich benutze, falsch sind (und bitte korrigieren Sie mich), aber es ist fast so, als ob der Vektor nicht global aktualisiert wird und nur lokal innerhalb der Funktion für die Dauer ihres Aufrufs aktualisiert wird.

Das ist die Funktionsdefinition und der Code innerhalb der Funktion, den ich benutze, um dem Vektor hinzuzufügen (ich überspringe alle Variablenzuweisungen der Parameter der Kürze halber). Alle von mir genannten Funktionen sind die Setter-Funktionen innerhalb der Klasse, und bis zu diesem Zeitpunkt enthält der Vektor bereits 20 Datensätze und wurde ähnlich wie die unten stehende Funktion eingerichtet.

void addBook(vector 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);
}

Ich wollte den Beitrag nicht mit zu viel Code überfluten, aber ich kann mehr posten, wenn das hilfreich wäre. Ich möchte nur, dass die Hinzufügungen (oder Löschungen, die ich in einer anderen Funktion vornehme) im gesamten Programm zugänglich sind.

5voto

Alok Save Punkte 196241

Sie sollten den Vektor als Referenz übergeben, um den ursprünglichen globalen Vektor zu bearbeiten.

void addBook(vector& bücher)
                            ^^^

Andernfalls übergeben Sie eine Kopie des Originalvektors an die Funktion und ändern diese, nicht die globale Version.

2voto

Mat Punkte 195740

Sie müssen Ihren Vektor überall dort als Referenz übergeben, wo es notwendig ist. In diesem speziellen Fall müssen Sie einfach ändern

void addBook(vector bücher)

zu:

void addBook(vector& bücher)

ansonsten erhält Ihre Funktion eine Kopie des Vektors, nicht eine Referenz auf den Originalen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X