2012-08-02 31 views
10

क्या कोई मुझे बता सकता है कि किसी अन्य फ़ंक्शन में किसी फ़ंक्शन में घोषित और परिभाषित चर का उपयोग कैसे करें। E.gकिसी अन्य फ़ंक्शन में एक फ़ंक्शन में परिभाषित और घोषित चरों का उपयोग कैसे करें?

void function1() 
{ 
    string abc; 
} 

void function2() 
{ 
    I want to access abc here. 
} 

यह कैसे करें? मुझे पैरामीटर का उपयोग करना पता है जो हम कर सकते हैं लेकिन क्या कोई और तरीका है?

+3

मेरा सुझाव है कि आप स्कोपिंग पर पढ़ लें, और आप समझेंगे कि यह क्यों संभव नहीं है। –

+0

यह बस कोई समझ नहीं आता है: 'function1' के प्रति आमंत्रण' abc' का एक उदाहरण है। 'के लिए (int i = 0; i <100; ++ i) {function1(); } 'आप' एबीसी 'के सौ सौ उदाहरणों में से कौन सा चाहते हैं? –

+0

क्या आप स्थिर सदस्यों के बारे में जानते हैं? – phadaphunk

उत्तर

12

सी ++ तरीका है अपने समारोह के संदर्भ द्वारा abc पारित करने के लिए है:

void function1() 
{ 
    std::string abc; 
    function2(abc); 
} 
void function2(std::string &passed) 
{ 
    passed = "new string"; 
} 

तुम भी एक सूचक के रूप में अपने स्ट्रिंग गुजरती हैं और function2 में यह भिन्नता हो सकती है। यह और अधिक काम करने के सी-शैली तरीका है और नहीं के रूप में सुरक्षित (जैसे एक शून्य सूचक में भी भेजी जा सकती है, और अच्छे त्रुटि जाँच के बिना यह अनिर्धारित व्यवहार या दुर्घटनाओं का कारण होगा।

void function1() 
{ 
    std::string abc; 
    function2(&abc); 
} 
void function2(std::string *passed) 
{ 
    *passed = "new string"; 
} 
+0

धन्यवाद, मैं कोशिश करूंगा और आपको बता दूंगा: डी –

+0

यह काम किया !! : डी धन्यवाद! –

1

बिल्कुल कोई रास्ता नहीं है। ब्लॉक के चर सीधे उस ब्लॉक से ही पहुंचा जा सकता है।

ऑब्जेक्ट के पॉइंटर्स/संदर्भों को इस ब्लॉक से पैरामीटर के रूप में बुलाए जाने वाले कार्यों में पारित किया जा सकता है।

+1

यह है कोर्स, झूठी। स्कोपिंग किसी ऑब्जेक्ट के नाम को किसी अन्य ब्लॉक में दिखाई देने से सीमित करती है। यह ऑब्जेक्ट तक पहुंच को सीमित नहीं करता है। अन्य माध्यमों के संदर्भ में संदर्भ पारित करके प्राप्त किया जा सकता है। –

+0

@EricPostpischil लेकिन क्या संदर्भ? स्कोपिंग ऑब्जेक्ट के जीवनकाल को भी परिभाषित करता है, जब तक कि यह स्थैतिक या गतिशील रूप से आवंटित न हो। इसके अलावा ओपी निर्दिष्ट "कोई पैरामीटर"। – juanchopanza

+0

एक वैश्विक चर में संदर्भ डालें। अन्य समारोह के संदर्भ पास करें। किसी फ़ंक्शन के संदर्भ को पास करें जो इसे अन्य फ़ंक्शन के लिए सुलभ बनाता है। पैरामीटर के रूप में एक पॉइंटर लें, और संदर्भ को संदर्भित स्थान पर संग्रहीत करें। आदि –

6

यह वैश्विक तो बनाओ दोनों यह हेरफेर कर सकते हैं

string abc; 

void function1(){ 
    abc = "blah"; 
} 

void function2(){ 
    abc = "hello"; 
} 
+1

मैं यह सुझाव देने जा रहा था, लेकिन ओपी विशेष रूप से कहता है, 'एक चर में घोषित और परिभाषित चर'। – JoeFish

+1

यदि वह परिवर्तनीय दायरे से परिचित नहीं है, तो यह संभव है कि उसे पता नहीं था कि यह संभव था। – BenN

+0

धन्यवाद! मै कोशिश करूँगा –

5

आप function1 में एक चर है कि आप function2 में उपयोग करना चाहते हैं, तो आपको या तो:।

  1. पास यह सीधे,
  2. एक उच्च गुंजाइश समारोह है कि दोनों चर घोषित करने और इसे पारित, या
  3. कॉल यह एक वैश्विक और उसके बाद सभी कार्यों यह

उपयोग कर सकते हैं की घोषणा, अपने function2 function1 से कहा जाता है तो आप कर सकते हैं बस इसे function2 के लिए एक तर्क के रूप में पास करें।

void function1() 
{ 
    std::string abc; 
    function2(abc); 
} 

void function2(std::string &passed) 
{ 
    // function1::abc is now aliased as passed and available for general usage. 
    cout << passed << " is from function1."; 
} 

function3 function1 function2 फोन नहीं करता है, लेकिन दोनों function3 द्वारा कहा जाता है, तो चर घोषित करने और यह दोनों function1 और एक तर्क के रूप function2 लिए गुजरती हैं।

void parentFunction() 
{ 
    std::string abc; 
    function1(abc); 
    function2(abc); 
} 
void function1(std::string &passed) 
{ 
    // Parent function's variable abc is now aliased as passed and available for general usage. 
    cout << passed << " is from parent function."; 
} 
void function2(std::string &passed) 
{ 
    // Parent function's variable abc is now aliased as passed and available for general usage. 
    cout << passed << " is from parent function."; 
}  

अंत में, न function1 है और न ही function2 एक दूसरे से कहते हैं अगर, और न ही कोड में एक ही समारोह से, तो चर एक वैश्विक रूप में साझा करने के लिए ऐलान करते हैं और function1 और function2 सीधे इसका इस्तेमाल करने में सक्षम हो जाएगा ।

std::string global_abc; 
void function1() 
{ 
    cout << global_abc << " is available everywhere."; 
} 
void function2() 
{ 
    cout << global_abc << " is available everywhere."; 
}  
संबंधित मुद्दे

 संबंधित मुद्दे