मैं डेल्फी XE8 में एक वर्ग के निम्नलिखित घोषणा की है:वर्ग घोषणा में एक प्रकार पैरामीटर बाधा के रूप में ही वर्ग का उपयोग करना
TestClass = class;
TestClass = class
function test<T: TestClass>(supplier: TFunc<T>): T; // Compiler error
end;
निम्नलिखित में से कौन संकलक त्रुटि फेंकता है:
E2086 Type 'TestClass' is not yet completely defined
जब मैं जोड़ने मिश्रण के लिए एक और वर्ग और इसके बजाय एक बाधा के रूप में उपयोग करें, यह ठीक काम करता है:
AnotherTestClass = class
end;
TestClass = class;
TestClass = class
function test<T: AnotherTestClass>(supplier: TFunc<T>): T; // No Error
end;
मुझे निलंबित समस्या यह है कि आगे की घोषणा घोषणा डेल्फी को प्रकार के बारे में अभी तक पर्याप्त नहीं बताती है।
TestClass = class;
AnotherTestClass = class (TestClass) // Compiler Error
end;
TestClass = class
function test<T: AnotherTestClass>(supplier: TFunc<T>): T;
end;
मैं कुछ गलत कर रहा हूँ और यदि नहीं, वहाँ इस समस्या को हल एक तरीका है: यह शायद और अधिक स्पष्ट के बाद से निम्नलिखित समस्या को हल करने का प्रयास एक अलग लाइन पर बहुत ही संकलक त्रुटि फेंकता है?
ऐसा लगता है कि इस संकलक में एक बग तो मैं एक [बग रिपोर्ट यहाँ] प्रस्तुत किया है (https://quality.embarcadero.com/ ब्राउज़ करें/आरएसपी 13348)। – overactor
निश्चित रूप से कोड "TestClass = class; अन्य टेस्ट क्लास = वर्ग (टेस्ट क्लास) // कंपाइलर त्रुटि अंत;" दिखाए गए त्रुटि का उत्पादन करना चाहिए क्योंकि डेल्फी एक एकल पास कंपाइलर है। लेकिन मुझे कोई कारण नहीं दिख रहा है कि जिस निर्माण को आप बनाने की कोशिश कर रहे हैं उस पर लागू होना चाहिए। परिभाषा के वैध होने के समय पर्याप्त जानकारी उपलब्ध है। – Dsm
@ डीएसएम सहमत हो गया, लेकिन चूंकि संकलक त्रुटि एक जैसी है, मुझे लगा कि यह गलत होने पर एक संकेत है। यह एक समस्या पेश करता है, हालांकि, अगर मैं दो वर्गों को एक दूसरे पैरामीटर बाधा के रूप में उपयोग करना चाहता हूं तो क्या होगा? – overactor