2012-02-15 35 views
8

我正在嘗試構建一個非常簡單的通訊簿。我創建了一個Contact類,地址簿是一個簡單的列表。我正在嘗試構建一個允許用戶將聯繫人添加到地址簿的功能。如果我把我的代碼放在函數之外,它就可以正常工作。但是,如果我放入它,它不起作用。我相信這是一個通過引用與傳遞價值的問題,我並不認爲我應該這樣做。這是函數的代碼:C++通過列表作爲函數的參數

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

調用'add_contact(通訊錄)時,'名單通訊錄'是不是被更新;' – Adrian 2012-02-15 22:48:15

回答

8

您按值傳遞​​,因此您傳入的內容將被複制,當您離開add_contact的範圍時,您的更改將丟失。

通過引用傳遞,而不是:

void add_contact(list<Contact>& address_book) 
+0

喜。感謝您的及時答覆。幫助了我很多!乾杯! – Adrian 2012-02-15 23:12:32

2

因爲您是按值傳遞列表中,因此它被複制,新的元素被添加到本地副本里面add_contact

解決方案:通過基準

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

void add_contact(list<Contact> & address_book)通過引用傳遞來傳遞地址簿。

1

通過引用傳遞

void add_contact(list<Contact>& address_book).