web-dev-qa-db-ja.com

関数へのパラメーターとしてのC ++パスリスト

非常にシンプルなアドレス帳を作成しようとしています。 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));
}

エラーは発生しませんが、すべての連絡先を表示しようとすると、元の連絡先しか表示されません。

13
Adrian

値によってaddress_bookを渡しているため、渡したもののコピーが作成され、add_contactのスコープを離れると、変更が失われます。

代わりに参照渡し:

void add_contact(list<Contact>& address_book)
13
ildjarn

リストを値渡ししているため、コピーされ、add_contact内のローカルコピーに新しい要素が追加されます。

解決策:参照渡し

void add_contact(list<Contact>& address_book).
2
Krizz

void add_contact(list<Contact> & address_book)と言って、アドレス帳を参照渡しします。

1
Kerrek SB

参照渡し

void add_contact(list<Contact>& address_book).
1
Gran Torino