2012-02-15 25 views
8

Estoy tratando de crear una libreta de direcciones muy simple. Creé una clase de contacto y la libreta de direcciones es una lista simple. Intento crear una función para permitir al usuario agregar contactos a la libreta de direcciones. Si tomo mi código fuera de la función, funciona bien. Sin embargo, si lo pongo, no funciona. Creo que es un problema de pasar por referencia vs pasar por valor que no estoy tratando como debería. Este es el código de la función:C++ lista de pase como un parámetro para una función

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

no consigo ningún error, sin embargo cuando intento para mostrar todos los contactos, puedo ver solamente los originales.

+0

La lista '' libretaDirecciones no está siendo actualización al llamar 'add_contact (agenda);' – Adrian

Respuesta

8

Usted está pasando address_book por valor, por lo que se hace una copia de lo que pasa y cuando abandona el alcance de add_contact se pierden los cambios.

Pasar por referencia en su lugar: se añaden

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

Hola. Gracias por la pronta respuesta. ¡Me ayudo mucho! ¡Aclamaciones! – Adrian

2

Debido a que está lista paso por valor, por lo que se copia, y nuevos elementos a una copia local en el interior add_contact.

Solución: el paso por referencia

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

Say void add_contact(list<Contact> & address_book) para pasar la libreta de direcciones por referencia.

1

Pasar por referencia

void add_contact(list<Contact>& address_book). 
Cuestiones relacionadas