Frage

Ich versuche, ein sehr einfaches Adressbuch zu erstellen. Ich habe eine Kontaktklasse erstellt und das Adressbuch ist eine einfache Liste. Ich versuche eine Funktion zu erstellen, mit der der Benutzer dem Adressbuch Kontakte hinzufügen kann. Wenn ich meinen Code außerhalb der Funktion nehme, funktioniert es in Ordnung. Wenn ich es jedoch einsehe, funktioniert es nicht. Ich glaube, es ist ein Verabschiedung von Referenz, das von einem Wertproblem vorhanden ist, das ich nicht so behandle, wie ich sollte. Dies ist der Code für die Funktion:

void add_contact(list<Contact> address_book)
{
     //the local variables to be used to create a new Contact
     string first_name, last_name, tel;

     cout << "Enter the first name of your contact and press enter: ";
     cin >> first_name;
     cout << "Enter the last name of your contact and press enter: ";
     cin >> last_name;
     cout << "Enter the telephone number of your contact and press enter: ";
     cin >> tel;

     address_book.push_back(Contact(first_name, last_name, tel));
}

Ich bekomme keine Fehler, aber wenn ich versuche, alle Kontakte anzuzeigen, kann ich nur die ursprünglichen sehen.

War es hilfreich?

Lösung

Du passt address_book nach Wert, also wird eine Kopie dessen, was Sie übergeben, und wenn Sie den Umfang von verlassen add_contact Ihre Änderungen gehen verloren.

Passen Sie stattdessen nach Referenz:

void add_contact(list<Contact>& address_book)

Andere Tipps

Weil Sie die Liste nach Wert bestehen, wird sie daher kopiert, und es werden neue Elemente zu einer lokalen Kopie im Inneren hinzugefügt add_contact.

Lösung: Pass für Referenz

void add_contact(list<Contact>& address_book).

Sagen void add_contact(list<Contact> & address_book) Um das Adressbuch durch Referenz zu übergeben.

Durch Referenz passieren

void add_contact(list<Contact>& address_book).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top