2013-03-03 11 views
21

मुझे फ़ंक्शन में संरचना (संदर्भ द्वारा) में कैसे पास करना है, इस बारे में समझने में समस्या हो रही है ताकि संरचना के सदस्य कार्यों को पॉप्युलेट किया जा सके। अब तक मैं लिखा है:फ़ंक्शन को पास करने के लिए

bool data(struct *sampleData) 
{ 

} 

int main(int argc, char *argv[]) { 

     struct sampleData { 

     int N; 
     int M; 
     string sample_name; 
     string speaker; 
    }; 
     data(sampleData); 

} 

त्रुटि मैं मिलता है:

सी ++ bool डेटा (स्थिरांक & testStruct)

मैं कोशिश की है सभी घोषणाओं के लिए एक प्रकार निर्दिष्टकर्ता की आवश्यकता है कुछ उदाहरण यहां समझाए गए हैं: Simple way to pass temporary struct by value in C++?

आशा है कि कोई मेरी मदद कर सकता है।

+0

आप एक फ़ंक्शन में एक प्रकार का नाम पारित कर रहे हैं जो चर नहीं है? – billz

+0

यह संदर्भ द्वारा नहीं है, यह सूचक है। आपने 'नमूनाडेटा' का उदाहरण नहीं बनाया है, इसलिए इसका कोई नाम नहीं है। साथ ही, फ़ंक्शन बूल डेटा को 'नमूनाडेटा' पता होना चाहिए कि कैसे मौजूद है? – Rapptz

+0

@ बिल्ज़ 'नमूनाडेटा 'मेरी संरचना का नाम है। मैं इस संरचना को फ़ंक्शन – Phorce

उत्तर

67

पहले, अपने डेटा के हस्ताक्षर() फ़ंक्शन:

bool data(struct *sampleData) 

संभवतः काम नहीं कर सकता, क्योंकि तर्क एक नाम का अभाव है। जब आप एक फ़ंक्शन तर्क घोषित करते हैं जिसका आप वास्तव में उपयोग करना चाहते हैं, तो उसे एक नाम की आवश्यकता है। तो कुछ के लिए इसे बदल:

bool data(struct sampleData *samples) 

लेकिन सी ++ में, आप बिल्कुल वास्तव में struct उपयोग करने की आवश्यकता नहीं है। तो यह बस हो सकता है:

bool data(sampleData *samples) 

दूसरा, sampleData struct डेटा() उस बिंदु पर करने के लिए नहीं जाना जाता है। तो आपको लगता है कि इससे पहले कि यह घोषित करना चाहिए:

struct sampleData { 
    int N; 
    int M; 
    string sample_name; 
    string speaker; 
}; 

bool data(sampleData *samples) 
{ 
    samples->N = 10; 
    samples->M = 20; 
    // etc. 
} 

और अंत में, आप प्रकार sampleData की एक चर बनाने की जरूरत है। उदाहरण के लिए, अपने मुख्य() फ़ंक्शन में:

int main(int argc, char *argv[]) { 
    sampleData samples; 
    data(&samples); 
} 

नोट यदि आप डेटा के लिए() फ़ंक्शन चर का पता उत्तीर्ण करने की आवश्यकता है कि क्योंकि यह एक सूचक स्वीकार करता है।

हालांकि, ध्यान दें कि सी ++ में आप सीधे संदर्भ द्वारा तर्क पारित कर सकते हैं और पॉइंटर्स के साथ इसे "अनुकरण" करने की आवश्यकता नहीं है। आप इसके बजाय ऐसा कर सकते हैं:

// Note that the argument is taken by reference (the "&" in front 
// of the argument name.) 
bool data(sampleData &samples) 
{ 
    samples.N = 10; 
    samples.M = 20; 
    // etc. 
} 

int main(int argc, char *argv[]) { 
    sampleData samples; 

    // No need to pass a pointer here, since data() takes the 
    // passed argument by reference. 
    data(samples); 
} 
1
bool data(sampleData *data) 
{ 
} 

आपको उस विधि को बताने की ज़रूरत है जिस प्रकार आप किस प्रकार की संरचना का उपयोग कर रहे हैं। इस मामले में, नमूनाडेटा।

नोट: इस मामले में, आपको पहचानने के लिए विधि से पहले संरचना को परिभाषित करने की आवश्यकता होगी।

उदाहरण:

struct sampleData 
{ 
    int N; 
    int M; 
    // ... 
}; 

bool data(struct *sampleData) 
{ 

} 

int main(int argc, char *argv[]) { 

     sampleData sd; 
     data(&sd); 

} 

नोट 2: मैं एक सी पुरुष हूँ। ऐसा करने के लिए एक और सी ++ ish रास्ता हो सकता है।

+0

पर पास करने में सक्षम होना चाहता हूं, अब मैं समझता हूं। संरचना "sample_data" फ़ंक्शन से पहले होनी चाहिए? – Phorce

+1

एक बार फिर, यह संदर्भ द्वारा नहीं है, यह * सूचक * द्वारा है। – Rapptz

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