"किसी संरचना या संघ में नहीं" सदस्य '*******' के लिए अनुरोध का क्या मतलब है?


83

क्या इस त्रुटि का क्या अर्थ है, इसकी एक आसान व्याख्या है?

मैंने इसे कई बार सामना किया है कि मैं सी सीख रहा हूं, लेकिन मुझे इसका कोई मतलब नहीं मिला है।


बेहतर उत्तर को शीर्ष पर स्वीकार किया जाना चाहिए।
T.Woody

जवाबों:


117

यह तब भी होता है जब आप एक पॉइंटर का उपयोग करने का प्रयास कर रहे हैं जब आपके पास एक पॉइंटर है, और इसके विपरीत:

जैसा कि एक टिप्पणी में कहा गया है, अगर किसी को जाता है और typedefएक पॉइंटर, यानि कि *एक टाइपराइफ में शामिल है , तो ऐसा हो सकता है:

क्योंकि तब आपको कोड मिलता है जो दिखता है कि यह उदाहरणों के साथ काम कर रहा है , जब वास्तव में यह पॉइंटर्स के साथ काम कर रहा है:

ध्यान दें कि ऊपर कैसा दिखता है जैसे कि इसे लिखा जाना चाहिए a_foo.field, लेकिन यह विफल हो जाएगा क्योंकि Fooयह एक सूचक है संरचना के लिए। मैं दृढ़ता से इसके खिलाफ सुझाव देता हूं typedef: सी। पॉइंट में एड पॉइंटर्स महत्वपूर्ण हैं, अपने तारांकन को छिपाएं नहीं। उन्हें चमकने दो।


8
मैं शर्त लगा सकता हूं कि यह वास्तविक समस्या है। यह अभी भी मुझे इस अवसर पर काटता है, खासकर अगर किसी ने एक पॉइंटर टाइप टाइप किया है।
जॉन बोडे

2
मैं केवल यह जोड़ना चाहूंगा कि यह त्रुटि तब दिखाई देगी जब कोई सरणी आवंटित नहीं की गई है (मॉलोक) और एक्सेस की गई है।
अधिकतम

मुझे पता है कि यह पोस्ट किए जाने के लगभग एक दशक या उससे अधिक समय हो चुका है, लेकिन पिछले दो वाक्यों ने इसे मेरी नई पसंदीदा पोस्ट बना दिया। "संकेत महत्वपूर्ण हैं, अपने तारांकन को छिपाएं नहीं। उन्हें चमकने दें।"
आइडल बेलेसेन कुनो

20

आप किसी संरचना के सदस्य तक पहुँचने का प्रयास कर रहे हैं, लेकिन ऐसी चीज़ में जो संरचना नहीं है। उदाहरण के लिए:


6

यह निम्नलिखित मामले में भी हो सकता है:

जैसे। यदि हम एक स्टैक के पुश फ़ंक्शन पर विचार करते हैं:

त्रुटि पुश फ़ंक्शन में और टिप्पणी लाइन में है। sकोष्ठक के भीतर सूचक को शामिल किया जाना है। सही कोड:


2
सूचक बिंदु (भाषा पर कोई भयानक नाटक) स्पष्ट करने के लिए धन्यवाद। अन्य उत्तर इसका उल्लेख करते हैं (उदाहरण के लिए "अपने बिंदुओं को चमकने दें") लेकिन 2:00 बजे जीडीबी और वालग्रिंड के साथ एक महाकाव्य लड़ाई में संघर्ष कर रहे हैं, जैसे कि लोग खुद की सराहना करते हैं कि आपका जवाब स्पष्ट रूप से दिखाता है कि सूचक एक मुद्दा कैसे हो सकता है और उस मुद्दे को कैसे ठीक किया जा सकता है। ।
मैक्स वॉन हिप्पेल

3

मैंने संभवतः सभी मामलों की गणना की है जहां यह त्रुटि कोड और इसकी टिप्पणियों में हो सकती है। यदि आप अधिक मामलों में आते हैं, तो कृपया इसे जोड़ें।

अंतर्निहित विचार सीधे हैं:

  • .संरचना चर के साथ प्रयोग करें । (मामले 2 और 4)
  • ->संरचना के लिए सूचक के साथ उपयोग करें । (मामले 1 और 3)
  • यदि आप पॉइंटर के बाद स्ट्रक्चर वेरिएबल या पॉइंटर से स्ट्रक्चर वैरिएबल तक पहुंचते हैं, तो पॉइंटर को ब्रैकेट के अंदर लपेटें: (*ptr).और (*ptr)->बनाम *ptr.और *ptr-> (केस 1 को छोड़कर सभी केस)
  • यदि आप निम्न बिंदुओं तक पहुंच रहे हैं, तो सुनिश्चित करें कि आप सही ढंग से पॉइंटर पर पहुंच चुके हैं या जो भी वांछित है। (केस 5, विशेष रूप से 5.5)

1

इसका मतलब हो सकता है कि आप भूल गए हैं एक हेडर फ़ाइल शामिल है जो इस संरचना / संघ को परिभाषित करता है। उदाहरण के लिए:

foo.h फ़ाइल:

main.c फ़ाइल:


0

भी दिखाई दे सकता है अगर:

के बजाय


इन दोनों कथनों में कोई अंतर नहीं है?
निक प्रेडी

1
@AlaaM महीनों बाद उस पर नज़र डालना, मुझे अर्धविराम याद आया!
निक प्रिडी

0

मैंने इसे तब देखा जब मैं सदस्यों को एक्सेस करने की कोशिश कर रहा था।

मेरी संरचना यह थी:

आम तौर पर हम संरचना सदस्यों का उपयोग करते हैं

मैंने टेस्टवेर को एक पॉइंटर होने के लिए गलत समझा और ऐसा किया।

जब मैंने यह त्रुटि देखी।

सदस्य 'क' के लिए अनुरोध संरचना या संघ में नहीं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.