2010-08-06 11 views
8

मान लीजिए मैं अपने कार्यक्रम में डेटा के एक वैश्विक सरणी साझा करना चाहते हैं, उदाहरण के लिए:सी के हेडर फ़ाइलों में बाहरी सरणी (और डबल सरणी) की घोषणाओं को सही तरीके से लिखने के लिए कैसे?

int lookup_indexes[] = { -1, 1, 1, -1, 2, 1, 1, -2, 2, 2, -1, 1, 1, 2 }; 

सी हेडर फाइल में इस सरणी के लिए सही extern घोषणा क्या है?

भी क्या इस तरह एक सरणी के बारे में: मैं इस

int double_indexes[][5] = { { -1, 1, 1, -1, 1 }, { 2, -2, 2, 1, -1 } }; 

मेरी हेडर फाइल में करने की कोशिश की:

extern int lookup_indexes[]; 
extern int double_indexes[][5]; 

लेकिन इस संकलक त्रुटियों में परिणाम:

water.h:5: error: array type has incomplete element type 

मैं कर सकते हैं इसे समझ नहीं है।

धन्यवाद, बोडा साइडो।

+0

आप 'water.h' की सामग्री को पोस्ट कर सकते हैं कम से कम लाइन 5 और शो जो लाइन त्रुटि पैदा अप। –

+0

चार्ल्स, यह #ifndef, #define, एक नई लाइन और 'बाहरी int lookup_indexes []; '(चौथी पंक्ति) और' बाहरी int double_indexes [] [5];' (5 वीं पंक्ति) है। – bodacydo

+0

वह इसे आपके प्रश्न में रखना था। बस इसे संलग्न करें। – detly

उत्तर

6

This लिंक बाहरी और बाहरी प्रबंधन के रूप में उपयोग किए जाने वाले सरणी और आकारों की समस्याओं पर चर्चा करता है।

  1. एक साथी चर घोषित करें, सरणी, परिभाषित और प्रारंभ (sizeof के साथ) एक ही स्रोत फ़ाइल में जहां सरणी परिभाषित किया गया है
  2. आकार के लिए एक प्रकट निरंतर परिभाषित के आकार से युक्त इतना है कि यह कर सकते हैं , परिभाषा और निर्वासन घोषणा कुछ प्रहरी मूल्य (आमतौर पर 0, -1, या शून्य) सरणी के अंतिम तत्व में

  3. उपयोग में लगातार इस्तेमाल किया जा इतना है कि कोड एक स्पष्ट आकार संकेत
बिना अंत निर्धारित कर सकते हैं
+0

+1। कंपाइलर को सरणी के आकार के बारे में कोई जानकारी नहीं है अगर इसे हेडर फ़ाइल – chrmue

+0

में स्पष्ट रूप से घोषित नहीं किया गया है, मुझे विश्वास नहीं है कि यह ओपी की समस्या है या प्रश्न: वह अपने सरणी के आकार को जानना नहीं चाहता, वह बस उन्हें ठीक से घोषित करना चाहता है। सी-एफएक्यू हमेशा लिंक के लिए लिंक हैं। – schot

2

आपके द्वारा पोस्ट किया गया कोड मेरी मशीन पर ठीक है और संकलित करता है (gcc -std=c99 -pedantic और gcc -std=c90 -pedantic)। क्या आपने इन लाइनों की प्रतिलिपि बनाई है या क्या आपने अपने असली हेडर में टाइपो बनाया हो सकता है?

उदाहरण टंकण त्रुटि है कि आपके त्रुटि (शुद्ध अटकलबाजी) का कारण बन सकता:

extern int double_indexes[][]; /* forgot the 5 */ 
extern int double_indexes[5][]; /* [] and [5] swapped */ 
+0

धन्यवाद, मुझे सत्यापित करने दें। – bodacydo