C ++传递列表作为函数的参数

时间:2012-02-15 22:42:56

标签: c++ list pass-by-reference pass-by-value

我正在尝试构建一个非常简单的地址簿。我创建了一个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 个答案:

答案 0 :(得分:10)

您按值传递address_book,因此会传递您传入的内容的副本,当您离开add_contact范围时,您的更改将会丢失。

通过引用传递:

void add_contact(list<Contact>& address_book)

答案 1 :(得分:2)

因为您按值传递列表,因此会复制它,并将新元素添加到add_contact内的本地副本。

解决方案:通过引用传递

void add_contact(list<Contact>& address_book).

答案 2 :(得分:1)

void add_contact(list<Contact> & address_book)通过引用传递地址簿。

答案 3 :(得分:1)

通过引用传递

void add_contact(list<Contact>& address_book).