Список передачи C ++ в качестве параметра функции - PullRequest
11 голосов
/ 16 февраля 2012

Я пытаюсь создать очень простую адресную книгу.Я создал класс Contact, и адресная книга представляет собой простой список.Я пытаюсь создать функцию, позволяющую пользователю добавлять контакты в адресную книгу.Если я возьму свой код за пределы функции, он будет работать нормально.Однако, если я вставлю это, это не сработает.Я полагаю, что это передача по ссылке против проблемы передачи по значению, с которой я не обращаюсь как следует.Это код для функции:

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));
}

Я не получаю никаких ошибок, однако при попытке отобразить все контакты я вижу только оригинальные.

Ответы [ 4 ]

11 голосов
/ 16 февраля 2012

Вы передаете address_book по значению, поэтому создается копия того, что вы передаете, и когда вы выходите за рамки add_contact, ваши изменения теряются.

Вместо этого передайте по ссылке:

void add_contact(list<Contact>& address_book)
2 голосов
/ 16 февраля 2012

Поскольку вы передаете список по значению, он копируется, и новые элементы добавляются в локальную копию внутри add_contact.

Решение: передать по ссылке

void add_contact(list<Contact>& address_book).
1 голос
/ 16 февраля 2012

Передать по ссылке

void add_contact(list<Contact>& address_book).
1 голос
/ 16 февраля 2012

Скажите void add_contact(list<Contact> & address_book), чтобы передать адресную книгу по ссылке.

...