我正在尝试构建一个非常简单的地址簿。我创建了一个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));
}
我没有收到任何错误,但是当我尝试显示所有联系人时,我只能看到原始联系人。
答案 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).