मैं Delphi: array of Char and TCharArray "Incompatible Types" पर देख रहा था और प्रयोग करना शुरू कर दिया था। जो मैंने खोजा वह दिलचस्प है।पैरामीटर की गतिशील सरणी है जब पैरामीटर प्रकार चार की खुली सरणी है?
procedure Clear(AArray: array of Integer);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := 0;
end;
var
MyArray: array of Integer;
begin
Clear(MyArray);
end.
यह सरल छोटे से उदाहरण दिखाता है कि आप एक ओपन सरणी पैरामीटर का उपयोग कर एक प्रक्रिया के लिए एक गतिशील सरणी पारित कर सकते हैं। यह संकलित करता है और अपेक्षित रूप से चलता है।
procedure Clear(AArray: array of Char);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := #0;
end;
var
MyArray: array of Char;
begin
Clear(MyArray);
end.
यहाँ लगभग समान कोड केवल यह Char
बजाय Integer
की एक सरणी उपयोग कर रहा है जा रहा है अंतर है। यह संकलित नहीं करता है। इसके बजाय संकलक बाहर निकलता है:
E2010 Incompatible types: 'Array' and 'Dynamic array'
यह क्यों होगा?
थोड़ी देर के लिए खोज करने के बाद मैंने this क्यूसी रिपोर्ट की खोज की। मैं डेल्फी 200 9 चला रहा हूं और यह अभी भी हो रहा है।
"अपेक्षित" क्या है? पहले मामले में सरणी को मंजूरी नहीं दी गई है। –
फिर भी, +1, केवल एक मामले संकलित करते हैं (भले ही हम 'AnsiChar' का उपयोग करें), जो कि अजीब है, क्योंकि पूर्णांक और' AnsiChar' के बीच बहुत कम अंतर होता है। –
@ एंड्रियास, ठीक है, तुमने मुझे वहां पहुंचाया। एक खाली सरणी को साफ़ करने के लिए कुछ भी नहीं है। मेरे टेस्ट कोड में सेटलेथैथ पर कॉल था लेकिन मैंने इसे हटा दिया क्योंकि यह संकलन त्रुटि के लिए सीधे प्रासंगिक नहीं था। –