2012-02-15 30 views
8

मैं एक बहुत ही सरल पता पुस्तिका बनाने की कोशिश कर रहा हूं। मैंने एक संपर्क वर्ग बनाया और पता पुस्तिका एक साधारण सूची है। मैं उपयोगकर्ता को पता पुस्तिका में संपर्क जोड़ने की अनुमति देने के लिए एक फ़ंक्शन बनाने की कोशिश कर रहा हूं। अगर मैं अपना कोड फ़ंक्शन के बाहर लेता हूं, तो यह ठीक काम करता है। हालांकि, अगर मैं इसे डालता हूं, तो यह काम नहीं करता है। मेरा मानना ​​है कि यह संदर्भ समस्या से गुज़र रहा है जो मूल्य समस्या से गुज़र रहा है, जिसका मैं इलाज नहीं कर रहा हूं जैसा मुझे करना चाहिए। इस समारोह के लिए कोड है:सी ++ पास फ़ंक्शन के पैरामीटर के रूप में पास सूची

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

उत्तर

8

आप मान द्वारा address_book गुजर रहे हैं, तो क्या आप में पास की एक प्रति किया जाता है और जब आप add_contact के दायरे छोड़ अपने परिवर्तन खो जाते हैं।

बजाय संदर्भ द्वारा पास:

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

हाय। तत्काल उत्तर के लिए धन्यवाद। मुझे बहुत मदद की! चीयर्स! – Adrian

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). 
संबंधित मुद्दे