स्विफ्ट क्लास में त्रुटि: सुपरइनिट कॉल पर प्रारंभिक संपत्ति नहीं


218

मेरे पास दो कक्षाएं हैं, ShapeऔरSquare

class Shape {
    var numberOfSides = 0
    var name: String
    init(name:String) {
        self.name = name
    }
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

class Square: Shape {
    var sideLength: Double

    init(sideLength:Double, name:String) {
        super.init(name:name) // Error here
        self.sideLength = sideLength
        numberOfSides = 4
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

उपरोक्त कार्यान्वयन से मुझे त्रुटि मिलती है:

property 'self.sideLength' not initialized at super.init call
    super.init(name:name)

मुझे self.sideLengthकॉल करने से पहले सेट क्यों करना होगा super.init?


बहुत यकीन है कि यह अच्छी प्रोग्रामिंग प्रथाओं के साथ करना है, न कि एक वास्तविक तकनीकी प्रतिबंध। यदि आकृति एक फ़ंक्शन को कॉल करने के लिए थी जिसे स्क्वायर ने ओवरराइड किया है, तो स्क्वायर साइडलेंथ का उपयोग करना चाह सकता है, लेकिन इसे अभी तक प्रारंभ नहीं किया गया है। स्विफ्ट शायद बस बेस क्लास कॉल करने से पहले आपको अपने उदाहरणों को शुरू करने के लिए मजबूर करके दुर्घटना पर ऐसा करने से रोकता है।
cwharris

3
पुस्तक में उदाहरण खराब हैं। आपको हमेशा सुपर.इनट () को कॉल करना चाहिए, यह सुनिश्चित करने के लिए कि सभी संपत्तियों को प्रारंभिक रूप से समझाया गया है, नीचे समझाया गया है।
पास्कल

जवाबों:


173

द स्विफ्ट प्रोग्रामिंग लैंग्वेज का उद्धरण, जो आपके प्रश्न का उत्तर देता है:

"स्विफ्ट का कंपाइलर यह सुनिश्चित करने के लिए चार सहायक सुरक्षा-जांच करता है कि दो-चरण का आरंभीकरण त्रुटि के बिना पूरा हो गया है:"

सुरक्षा जांच 1 "एक निर्दिष्ट इनिशलाइज़र को यह सुनिश्चित करना चाहिए कि सुपर क्लास इनिशियलाइज़र के सामने आने से पहले" उसके वर्ग द्वारा शुरू की गई सभी प्रॉपर्टीज़ को इनिशियलाइज़ किया जाए। "

इसके अंश: Apple Inc. "स्विफ्ट प्रोग्रामिंग लैंग्वेज।" iBooks। https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11


47
अब यह C ++, C # या Java की तुलना में एक आश्चर्यजनक बदलाव है।
एमडीजे

12
@MDJ ज़रूर बात। मैं ईमानदारी से इसके अतिरिक्त मूल्य को नहीं देखता हूं।
Ruben

20
वास्तव में लगता है कि एक है। C # में कहें, सुपरक्लास कंस्ट्रक्टर को किसी भी तरह के ओवरड्रिजेबल (आभासी) तरीकों को नहीं कहना चाहिए, क्योंकि किसी को भी नहीं पता है कि वे पूरी तरह से इनिशियलाइज्ड सबक्लास के साथ कैसे रिएक्ट करेंगे। स्विफ्ट में ठीक है, क्योंकि उपवर्ग अतिरिक्त स्थिति ठीक है, जब सुपरक्लास कंस्ट्रक्टर चल रहा है। इसके अलावा, स्विफ्ट में सभी लेकिन अंतिम तरीके अतिश्योक्तिपूर्ण हैं।
एमडीजे

17
मुझे विशेष रूप से यह कष्टप्रद लग रहा है क्योंकि इसका मतलब है, अगर मैं एक UIView उपवर्ग बनाना चाहता हूं जो अपने स्वयं के साक्षात्कार बनाता है, तो मुझे उन सबव्यूज़ को बिना फ़्रेम के शुरू करने और बाद में फ़्रेम जोड़ने के लिए प्रारंभ करना होगा क्योंकि मैं दृश्य के लिए संदर्भित नहीं कर सकता AF.in सुपरिट कॉल करने तक की सीमा।
ऐश

5
@ जानोस यदि आप संपत्ति को वैकल्पिक बनाते हैं, तो आपको इसे शुरू करने की आवश्यकता नहीं है init
जेरेमीप

105

स्विफ्ट के संचालन का एक बहुत ही स्पष्ट, विशिष्ट अनुक्रम है जो कि शुरुआती में किया जाता है। आइए कुछ बुनियादी उदाहरणों के साथ शुरू करें और एक सामान्य मामले तक अपना काम करें।

आइए एक वस्तु लेते हैं। हम इसे निम्नानुसार परिभाषित करेंगे।

class A {
    var x: Int
    init(x: Int) {
        self.x = x
    }
}

ध्यान दें कि ए में सुपरक्लास नहीं है, इसलिए यह सुपर.इनिट () फ़ंक्शन को कॉल नहीं कर सकता है क्योंकि यह मौजूद नहीं है।

ठीक है, तो अब बी के नाम से एक नए वर्ग के साथ एक उपवर्ग करें।

class B: A {
    var y: Int
    init(x: Int, y: Int) {
        self.y = y
        super.init(x: x)
    }
}

यह ऑब्जेक्टिव-सी से एक प्रस्थान है जहां [super init]आमतौर पर किसी भी चीज़ से पहले सबसे पहले बुलाया जाएगा। स्विफ्ट में ऐसा नहीं है। आप यह सुनिश्चित करने के लिए ज़िम्मेदार हैं कि कॉल करने के तरीकों (जिसमें आपका सुपरक्लास 'इनिशियलाइज़र शामिल है) सहित कुछ भी करने से पहले आपके उदाहरण चर एक सुसंगत स्थिति में हैं।


1
यह बेहद मददगार है, एक स्पष्ट उदाहरण। धन्यवाद!
फुलमेटेलफिस्ट

क्या होगा यदि मुझे y की गणना करने के लिए मान की आवश्यकता है, उदाहरण के लिए: init (y: Int) {self.y = y * self.x super.init ()}
6rod9

1
init (y: Int, x: Int = 0) {self.y = y * x; self.x = x; super.init (x: x)}, आप भी उपरोक्त उदाहरण के संदर्भ में सीधे सुपर क्लास के लिए खाली कंस्ट्रक्टर को कॉल नहीं कर सकते, क्योंकि सुपर क्लास के नाम A में खाली कंस्ट्रक्टर नहीं है
हितेंद्र सोलंकी

43

से डॉक्स

सुरक्षा जाँच १

एक निर्दिष्ट इनिशियलाइज़र को यह सुनिश्चित करना होगा कि सुपरक्लास इनिशियलाइज़र के सामने आने से पहले उसके वर्ग द्वारा शुरू की गई सभी संपत्तियों को इनिशियलाइज़ किया जाए।


हमें इस तरह से सुरक्षा जांच की आवश्यकता क्यों है?

इसका उत्तर देने के लिए हालांकि प्रारंभिक प्रक्रिया में तेजी आती है।

दो-चरण की शुरूआत

स्विफ्ट में क्लास इनिशियलाइज़ेशन एक दो-चरण की प्रक्रिया है। पहले चरण में, प्रत्येक संग्रहीत संपत्ति को उस वर्ग द्वारा प्रारंभिक मूल्य सौंपा जाता है जिसने इसे पेश किया था। एक बार प्रत्येक संग्रहीत संपत्ति के लिए प्रारंभिक स्थिति निर्धारित हो जाने के बाद, दूसरा चरण शुरू होता है, और प्रत्येक वर्ग को अपने संग्रहीत गुणों को आगे बढ़ाने का अवसर दिया जाता है, इससे पहले कि नई आवृत्ति उपयोग के लिए तैयार मानी जाए।

दो-चरण आरंभीकरण प्रक्रिया का उपयोग आरंभीकरण को सुरक्षित बनाता है, जबकि अभी भी एक वर्ग पदानुक्रम में प्रत्येक वर्ग को पूर्ण लचीलापन देता है। दो-चरण का प्रारंभ संपत्ति के मूल्यों को प्रारंभिक होने से पहले एक्सेस करने से रोकता है, और संपत्ति के मान को अप्रत्याशित रूप से किसी अन्य इनिशियलाइज़र द्वारा भिन्न मान पर सेट होने से रोकता है।

इसलिए, यह सुनिश्चित करने के लिए कि दो चरण आरंभीकरण प्रक्रिया ऊपर बताई गई है, चार सुरक्षा जांच हैं, उनमें से एक है,

सुरक्षा जाँच १

एक निर्दिष्ट इनिशियलाइज़र को यह सुनिश्चित करना होगा कि सुपरक्लास इनिशियलाइज़र के सामने आने से पहले उसके वर्ग द्वारा शुरू की गई सभी संपत्तियों को इनिशियलाइज़ किया जाए।

अब, दो चरण के आरंभीकरण आदेश के बारे में कभी बात नहीं करता है, लेकिन यह सुरक्षा जांच, super.initसभी गुणों के आरंभ के बाद, आदेश दिए जाने का परिचय देता है।

सेफ्टी चेक 1 अप्रासंगिक लग सकता है, क्योंकि दो-चरण इनिशियलाइज़ेशन इस वैल्यू को चेक किए बिना प्रॉपर्टी वैल्यू को एक्सेस करने से पहले संतुष्ट होने से रोकता है

जैसे इस नमूने में

class Shape {
    var name: String
    var sides : Int
    init(sides:Int, named: String) {
        self.sides = sides
        self.name = named
    }
}

class Triangle: Shape {
    var hypotenuse: Int
    init(hypotenuse:Int) {
        super.init(sides: 3, named: "Triangle") 
        self.hypotenuse = hypotenuse
    }
}

Triangle.initउपयोग किए जाने से पहले हर संपत्ति को इनिशियलाइज़ किया है। तो सुरक्षा जांच 1 अप्रासंगिक लगती है,

लेकिन फिर एक और परिदृश्य हो सकता है, थोड़ा जटिल,

class Shape {
    var name: String
    var sides : Int
    init(sides:Int, named: String) {
        self.sides = sides
        self.name = named
        printShapeDescription()
    }
    func printShapeDescription() {
        print("Shape Name :\(self.name)")
        print("Sides :\(self.sides)")
    }
}

class Triangle: Shape {
    var hypotenuse: Int
    init(hypotenuse:Int) {
        self.hypotenuse = hypotenuse
        super.init(sides: 3, named: "Triangle")
    }

    override func printShapeDescription() {
        super.printShapeDescription()
        print("Hypotenuse :\(self.hypotenuse)")
    }
}

let triangle = Triangle(hypotenuse: 12)

आउटपुट:

Shape Name :Triangle
Sides :3
Hypotenuse :12

यहां यदि हमने कॉल करने super.initसे पहले कॉल किया था hypotenuse, तो super.initकॉल ने कॉल किया होगा printShapeDescription()और तब से इसे ओवरराइड किया गया होगा, यह पहले त्रिभुज के क्लास कार्यान्वयन पर वापस आ जाएगा printShapeDescription()printShapeDescription()त्रिभुज वर्ग के लिए उपयोग की hypotenuseएक गैर वैकल्पिक संपत्ति अभी भी initialised नहीं किया गया है। और इसकी अनुमति नहीं है क्योंकि दो-चरण आरंभीकरण संपत्ति के मूल्यों को आरंभिक होने से पहले एक्सेस करने से रोकता है

इसलिए सुनिश्चित करें कि दो चरण की super.initशुरुआत को परिभाषित किया गया है, कॉलिंग का एक विशिष्ट क्रम होना चाहिए , और वह यह है कि selfकक्षा द्वारा शुरू की गई सभी संपत्तियों को शुरू करने के बाद , इस प्रकार हमें एक सुरक्षा जांच की आवश्यकता है 1


1
महान स्पष्टीकरण, क्यों निश्चित रूप से शीर्ष उत्तर में जोड़ा जाना चाहिए।
गाय डाहर

तो आप मूल रूप से कह रहे हैं, क्योंकि सुपरक्लास एक (ओवररिडेन) फ़ंक्शन init को कॉल कर सकता है ... जिसमें फ़ंक्शन फ़ंक्शन उप-वर्ग की संपत्ति तक पहुंचता है, फिर मान सेट नहीं होने से बचने के लिए, कॉल superसभी मूल्यों के सेट होने के बाद होना चाहिए। ठीक है समझ में आता है। आश्चर्य है कि ऑब्जेक्टिव-सी ने ऐसा कैसे किया और आपको पहले क्यों बुलाना पड़ा super?
हनी

अनिवार्य रूप से जो आप इंगित कर रहे हैं वह समान है: printShapeDescription() इससे पहले self.sides = sides; self.name = named; कि यह त्रुटि उत्पन्न हो use of 'self' in method call 'printShapeDescription' before all stored properties are initialized। रनटाइम त्रुटि की 'संभावना' को कम करने के लिए ओपी की त्रुटि दी गई है।
हनी

मैंने विशेष रूप से 'संभावना' शब्द का इस्तेमाल किया है, क्योंकि यदि printShapeDescriptionकोई ऐसा फ़ंक्शन होता है, जो कि संदर्भित नहीं होता है तो selfयह `प्रिंट (" कुछ भी नहीं ") जैसा होता है तो कोई समस्या नहीं होती। (फिर भी इसके लिए कंपाइलर एक त्रुटि फेंक देगा, क्योंकि यह सुपर स्मार्ट नहीं है )
हनी

खैर objc सिर्फ सुरक्षित नहीं था। स्विफ्ट सुरक्षित है इसलिए ऑब्जेक्ट्स जो वैकल्पिक नहीं हैं वास्तव में नॉनमिल होने की आवश्यकता है!
दै -जवान

36

आपके सभी इंस्टेंस वेरिएबल्स को इनिशियलाइज़ करने के बाद "super.init ()" को कॉल किया जाना चाहिए।

Apple के "इंटरमीडिएट स्विफ्ट" वीडियो में (आप इसे Apple डेवलपर वीडियो संसाधन पेज https://developer.apple.com/videos/wwdc/2014/ पर पा सकते हैं ), लगभग 28:40 पर, यह स्पष्ट है कि सभी इनिशियलाइज़र में सुपर क्लास को तब बुलाया जाना चाहिए जब आप अपने उदाहरण चर को इनिशियलाइज़ करते हैं।

ऑब्जेक्टिव-सी में, यह रिवर्स था। स्विफ्ट में, चूंकि सभी संपत्तियों को उपयोग करने से पहले आरंभीकृत करने की आवश्यकता है, इसलिए हमें पहले गुणों को शुरू करने की आवश्यकता है। इसका मतलब सुपर क्लास की "इनिट ()" विधि से अतिरंजित फ़ंक्शन को कॉल को रोकने के लिए है, पहले गुणों को शुरू किए बिना।

तो "स्क्वायर" का कार्यान्वयन होना चाहिए:

class Square: Shape {
    var sideLength: Double

    init(sideLength:Double, name:String) {
        self.sideLength = sideLength
        numberOfSides = 4
        super.init(name:name) // Correct position for "super.init()"
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

1
कभी अनुमान नहीं लगाया होगा। सुपर के साथ प्रारंभिक मुट्ठी बयान होना चाहिए जो मैंने सोचा होगा। !! एचएम। स्विफ्ट के साथ काफी बदलाव।
पौराणिक

इसके बाद आने की जरूरत क्यों है? कृपया एक तकनीकी कारण बताएं
Masih

14

बदसूरत स्वरूपण के लिए क्षमा करें। बस घोषणा के बाद एक प्रश्न चरित्र रखो और सब कुछ ठीक हो जाएगा। एक प्रश्न संकलक को बताता है कि मूल्य वैकल्पिक है।

class Square: Shape {
    var sideLength: Double?   // <=== like this ..

    init(sideLength:Double, name:String) {
        super.init(name:name) // Error here
        self.sideLength = sideLength
        numberOfSides = 4
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

Edit1:

इस त्रुटि को छोड़ने का एक बेहतर तरीका है। जैम्सचैड की टिप्पणी के अनुसार आपके मामले में वैकल्पिक का उपयोग करने का कोई कारण नहीं है क्योंकि वैकल्पिक उपयोग में सहज नहीं हैं और आपको हमेशा यह जांचना होगा कि क्या इसे एक्सेस करने से पहले वैकल्पिक शून्य नहीं है। इसलिए आपको घोषणा के बाद सदस्य को शुरू करना है:

class Square: Shape {
    var sideLength: Double=Double()   

    init(sideLength:Double, name:String) {
        super.init(name:name)
        self.sideLength = sideLength
        numberOfSides = 4
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

EDIT2:

दो जवाब मिलने के बाद मुझे इसका और बेहतर तरीका मिला। यदि आप चाहते हैं कि क्लास मेंबर आपके कंस्ट्रक्टर में इनिशियलाइज़ हो तो आपको कंट्रोवर्शियल के अंदर और सुपर.इनिट () कॉल से पहले इनिशियल वैल्यू असाइन करना होगा। ऐशे ही:

class Square: Shape {
    var sideLength: Double  

    init(sideLength:Double, name:String) {
        self.sideLength = sideLength   // <= before super.init call..
        super.init(name:name)
        numberOfSides = 4
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

स्विफ्ट सीखने में अच्छी किस्मत।


बस स्विच super.init(name:name)और self.sideLength = sideLengthsideLengthवैकल्पिक के रूप में घोषित करना भ्रामक है और बाद में अतिरिक्त परेशानी का सामना करना पड़ता है जब आपको इसे खोलना पड़ता है।
जोहान्स लूंग

हाँ, यह एक विकल्प है। धन्यवाद
fnc12

आपके पास वास्तव में बस हो सकता है var sideLength: Double, इसे प्रारंभिक मूल्य निर्दिष्ट करने की आवश्यकता नहीं है
जर्सन

क्या होगा यदि मेरे पास वास्तव में एक वैकल्पिक स्थिरांक है। इसके साथ मैं क्या करूं? क्या मुझे कंस्ट्रक्टर में इनिशियलाइज़ करना है? मैं यह नहीं देखता कि आपको ऐसा क्यों करना है, लेकिन कंपाइलर स्विफ्ट 1.2 में शिकायत कर रहा है
वान डू ट्रान

1
उत्तम ! सभी 3 समाधानों ने काम किया ""?, "स्ट्रिंग ()", लेकिन मेरे लिए मुद्दा यह था कि मैंने संपत्ति में से एक को 'असाइन' नहीं किया था, और जब मैंने ऐसा किया तो यह काम कर गया! शुक्रिया दोस्त
Naishta

9

स्विफ्ट आपको हर सदस्य संस्करण को इनिशियलाइज़ करने से पहले बताता है कि यह कभी भी है / कभी भी उपयोग किया जा सकता है। चूँकि यह सुनिश्चित नहीं किया जा सकता कि जब यह सुपरर्स टर्न होता है, तो यह गलत हो जाता है: सॉरी से बेहतर सुरक्षित


1
इसका मतलब यह नहीं है कि IMO क्योंकि माता-पिता के बच्चों में घोषित गुणों में कोई दृश्यता नहीं होनी चाहिए!
एंडी हिन

1
यह नहीं है, लेकिन आप सामान को ओवरराइड कर सकते हैं और स्वयं का उपयोग करना शुरू कर सकते हैं 'सुपर से पहले इसे बना दिया'
दाइ -जवान-

क्या आप यहां देख सकते हैं और टिप्पणियां जो इसका अनुसरण कर रही हैं? मुझे लगता है कि मैं बिल्कुल वही कह रहा हूं जो आप कह रहे हैं यानी हम दोनों कह रहे हैं कि कंपाइलर सॉरी के बजाय सुरक्षित रहना चाहता है, मेरा एकमात्र सवाल है, तो इस समस्या का समाधान कैसे किया गया? या यह नहीं था? यदि यह नहीं था तो फिर भी आपको super.initपहली पंक्ति में लिखने की आवश्यकता क्यों है ?
हनी

7

एडवर्ड,

आप अपने उदाहरण में कोड को इस तरह से संशोधित कर सकते हैं:

var playerShip:PlayerShip!
var deltaPoint = CGPointZero

init(size: CGSize)
{
    super.init(size: size)
    playerLayerNode.addChild(playerShip)        
}

यह एक अंतर्निहित अलिखित वैकल्पिक का उपयोग कर रहा है।

प्रलेखन में हम पढ़ सकते हैं:

"वैकल्पिक के साथ के रूप में, यदि आप एक प्रारंभिक मूल्य प्रदान नहीं करते हैं जब आप एक अंतर्निहित अलिखित वैकल्पिक चर या संपत्ति की घोषणा करते हैं, तो यह शून्य के लिए स्वचालित रूप से चूक है।"


मुझे लगता है कि यह सबसे साफ विकल्प है। मेरे पहले स्विफ्ट प्रयास में, मेरे पास AVCaptureDevice प्रकार का एक सदस्य चर था, जिसे सीधे सीधे नहीं किया जा सकता था, इसलिए init () कोड की आवश्यकता थी। हालाँकि, ViewController को कई इनिशियलाइज़र की आवश्यकता होती है, और आप init () से कॉमन इनिशियलाइज़ेशन मेथड नहीं कह सकते हैं, इसलिए यह उत्तर एकमात्र विकल्प लगता है जो हर इनिशियलाइज़र में डुप्लिकेट कोड कॉपी / पेस्ट करने से बचता है।
19

6

स्विफ्ट आपको सुपर क्लास को प्रॉपर्टीज़ को इनिशियलाइज़ करने की अनुमति नहीं देगा, ओबज सी का उल्टा। इसलिए आपको "सुपर.इनट" कॉल करने से पहले सभी प्रॉपर्टीज़ को इनिशियलाइज़ करना होगा।

कृपया http://blog.scottlogic.com/2014/11/20/swift-initialisation.html पर जाएं । यह आपकी समस्या का अच्छा विवरण देता है।


6

घोषणा के अंत में शून्य जोड़ें।


// Must be nil or swift complains
var someProtocol:SomeProtocol? = nil

// Init the view
override init(frame: CGRect)
    super.init(frame: frame)
    ...

यह मेरे मामले के लिए काम आया, लेकिन आपके लिए काम नहीं कर सकता


अच्छा है, जबकि प्रोटोकॉल के साथ UIViewController के साथ UIView के साथ उपयोग करते हुए
पेट सतहर

1

आप सिर्फ गलत क्रम में प्रवेश कर रहे हैं।

     class Shape2 {
        var numberOfSides = 0
        var name: String
        init(name:String) {
            self.name = name
        }
        func simpleDescription() -> String {
            return "A shape with \(numberOfSides) sides."
        }
    }

    class Square2: Shape2 {
        var sideLength: Double

        init(sideLength:Double, name:String) {

            self.sideLength = sideLength
            super.init(name:name) // It should be behind "self.sideLength = sideLength"
            numberOfSides = 4
        }
        func area () -> Double {
            return sideLength * sideLength
        }
    }

0

मुझे शायद कुछ डाउनवोट प्राप्त होंगे, लेकिन ईमानदार होने के लिए, जीवन इस तरह से आसान है:

class CSListServerData<ListItem: CSJsonData>: CSServerData {
    var key: String!
    var type: ListItem.Type!
    var property: CSJsonDataList<ListItem>!

    func construct(_ key: String, _ type: ListItem.Type) -> Self {
        self.key = key
        self.type = type
        property = CSJsonDataList(self, type, key)
        return self
    }

    func construct(_ type: ListItem.Type) { construct("list", type) }

    var list: [ListItem] { property.list }
}

-4

यह एक आश्चर्यजनक रूप से बेवकूफ डिजाइन है।

कुछ इस तरह से विचार करें:

.
.
.
var playerShip:PlayerShip
var deltaPoint = CGPointZero

init(size: CGSize)
{
    super.init(size: size)
    playerShip = PlayerShip(pos: CGPointMake(self.size.width / 2.0, 100))
    playerLayerNode.addChild(playerShip)        
}
.
.
.

यह अमान्य है, जैसा कि ऊपर उल्लेख किया गया है। लेकिन ऐसा है:

.
.
.
var playerShip:PlayerShip = PlayerShip(pos: CGPointMake(self.size.width / 2.0, 100))
var deltaPoint = CGPointZero

init(size: CGSize)
{
    super.init(size: size)
    playerLayerNode.addChild(playerShip)        
}
.
.
.

क्योंकि 'स्व' को आरंभ नहीं किया जा सकता है।

मुझे पूरी उम्मीद है कि यह बग जल्द ही ठीक हो जाएगा।

(हां मुझे पता है कि मैं एक खाली वस्तु बना सकता हूं और फिर आकार सेट कर सकता हूं लेकिन यह सिर्फ बेवकूफ है)।


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