C ++ - Passliste als Parameter für eine Funktion
-
25-10-2019 - |
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.
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).