2009-10-29 10 views
6

मैं तर्क के रूप में पारित एक निश्चित वर्ग की सरणी का आकार बदलने का प्रयास कर रहा हूं, उदा।डेल्फी: टाइपबैंथ() "तर्क की सरणी" के तर्क पर

procedure Resize(MyArray: Array of TObject); 
begin 
    SetLength(MyArray, 100); 
end; 

हालांकि, इससे "E2008 असंगत प्रकार" त्रुटि उत्पन्न होती है। क्या यह सच है कि आप ऐसा नहीं कर सकते (मैंने अफवाहें देखी हैं, लेकिन कोई आधिकारिक दस्तावेज नहीं है) या क्या मैं कुछ गलत कर रहा हूं?

उत्तर

10

आपने स्पष्ट रूप से इस प्रकार को परिभाषित नहीं किया है। तो संकलक को उनसे मेल खाने में समस्याएं हैं। आप प्रकार की तरह परिभाषित हैं:

type 
    TObjectArray = array of TObject; 

इसके बारे में कोई संदेह नहीं है और (Mghie करने के लिए धन्यवाद) यदि आप एक वर पैरामीटर का उपयोग किया जाना चाहिए, क्योंकि संभावना resising है सूचक में एक परिवर्तन का कारण है।

procedure Resize(var MyArray: TObjectArray); 
begin 
    SetLength(MyArray, 100); 
end; 
+3

एक var पैरामीटर होना चाहिए? – mghie

+0

अच्छा बिंदु। इसे ठीक किया –

+0

यह उत्तर कुंजी बिंदु को याद करता है जो खुले सरणी और डायनैमिक सरणी के बीच का अंतर है। –

9

आप खुला सरणियों (आकार के पैरामीटर) और गतिशील सरणियों (क्या SetLength उम्मीद) मिश्रण कर रहे हैं। एक स्पष्टीकरण के लिए here देखें - विशेष रूप से "भ्रम" शीर्षक वाला हिस्सा।

+0

धन्यवाद Gerhardt। मैं अभी भी यह सामान सीख रहा हूँ। :) – conciliator

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