2011-05-31 16 views
6

मैं कुछ डी में निर्माताओं की अस्पष्टता से निपटने के लिए कैसेअस्पष्ट Struct कंस्ट्रक्टर्स डी

struct mydta { 
    int a = 2; 
    int b = 3; 

    this(int c) { 
     a = c/2; 
     b = c * 2; 
    } 
    this(float c) { 
     a = cast(int) c/2; 
     b = cast(int) c * 2; 
    } 

    static mydta afvec = mydta(4.3); 
    static mydta aivec = mydta(5); 
} 
  • afvec डेटा को महत्व देता है 2 और 8
  • aivec डेटा है है समझने में परेशानी हो रही में मान 5 और 3.

इसका मतलब है कि afvecthis(float c) को वाक्यविन्यास से अपेक्षित कहा जाता है।

हालांकि aivec ने aivec.a = 5 के समान असाइनमेंट किया है।

मैंने यह पता लगाने के लिए इस पर विस्तार किया है कि उपरोक्त में निम्न कानूनी है: aivec = mydta(5, 4);aivec क्रमशः 5 और 4 मान देता है।

कोई भी विचार इस अंतर्निहित प्रारंभिकरण को कैसे बाईपास करना है ताकि मैं अपने कन्स्ट्रक्टर तक पहुंच सकूं: this(int c)?

+0

एक फ्लोट भी 5 हो सकता है, इसलिए यह नहीं जानता कि किस कन्स्ट्रक्टर का उपयोग करना है। उनमें से एक को कास्ट जोड़ने का प्रयास करें। – Kevin

+0

यह समस्या नहीं है, समस्या यह है कि यदि मैं एक int का उपयोग करता हूं, तो यह 'इस (int c)' कन्स्ट्रक्टर के बजाय कुछ अंतर्निहित प्रारंभिक कॉल करता है जिसे मैं कॉल करना चाहता हूं। – dcousens

उत्तर

5

यह मेरे लिए एक बग जैसा दिखता है।

आप ऐसा करते हैं:

mydta foo = mydta(5); 
writeln(foo.b); 

आप मिल 10 अपेक्षा के अनुरूप। संस्करण 2.053 के लिए सीटीएफई में बहुत सारे बदलाव हुए थे, इसलिए परिणामस्वरूप कुछ तोड़ दिया गया हो सकता है। कृपया इसे D issue tracking system पर एक बग के रूप में पोस्ट करें।

+0

आपका अधिकार, यह केवल स्थिर चर के लिए होता है, और अन्य स्थितियों में काम करता है। धन्यवाद। – dcousens

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

  • कोई संबंधित समस्या नहीं^_^