2012-02-15 16 views
8

Tôi đang cố gắng xây dựng một sổ địa chỉ rất đơn giản. Tôi đã tạo một lớp Contact và sổ địa chỉ là một danh sách đơn giản. Tôi đang cố gắng xây dựng một chức năng để cho phép người dùng thêm địa chỉ liên hệ vào sổ địa chỉ. Nếu tôi lấy mã của tôi bên ngoài chức năng, nó hoạt động OK. Tuy nhiên, nếu tôi đặt nó vào, nó không hoạt động. Tôi tin rằng đó là một đi qua tham chiếu vs đi qua vấn đề giá trị mà tôi không điều trị như tôi nên. Đây là mã cho hàm:Danh sách vượt qua C++ làm tham số cho hàm

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

Tôi không gặp bất kỳ lỗi nào khi cố gắng hiển thị tất cả địa chỉ liên hệ, tôi chỉ có thể thấy các liên hệ gốc.

+0

Lệnh 'danh sách AddressBook 'là không được cập nhật khi gọi' add_contact (AddressBook);' – Adrian

Trả lời

8

Bạn đang vượt qua address_book theo giá trị, do đó, bản sao của những gì bạn vượt qua được thực hiện và khi bạn rời khỏi phạm vi add_contact thay đổi của bạn sẽ bị mất.

đèo bằng cách tham chiếu thay vì:

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

Hi. Cảm ơn câu trả lời nhanh chóng. Giúp tôi rất nhiều! Chúc mừng! – Adrian

2

Bởi vì bạn đang đi qua danh sách theo giá trị, do đó nó được sao chép, và mới các yếu tố được thêm vào một bản sao cục bộ bên trong add_contact.

Giải pháp: vượt qua bằng cách tham khảo

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

Say void add_contact(list<Contact> & address_book) để vượt qua sổ địa chỉ bằng cách tham khảo.

1

đèo bằng cách tham khảo

void add_contact(list<Contact>& address_book).