2010-12-03 22 views
10

यह शायद एक हास्यास्पद रूप से आसान सवाल है, लेकिन मैं थोड़ी देर के लिए उत्तर के लिए चारों ओर खोज कर रहा हूं, लेकिन इसे समझने के लिए प्रतीत नहीं होता है। मैं एक कक्षा में निरंतर परिवर्तनीय निरंतर सूचक प्रारंभ करने की कोशिश कर रहा हूं।कक्षाओं में अनियमित स्थिर सदस्य

class Scheduler{ 
    public: 
    Scheduler(); 
    explicit Scheduler(unsigned long *); 

    private: 
    const unsigned long *const thresh; 

}; 

यहाँ और वर्ग

Scheduler::Scheduler(unsigned long * threshold): 
    thresh(threshold) 
{} 

मुझे इस कोड मैं इस त्रुटि प्राप्त संकलित करने के लिए प्रयास करने के लिए निर्माता है:: यहाँ हेडर फ़ाइल है

scheduler.cpp: In constructor ‘Scheduler::Scheduler()’: 
scheduler.cpp:3: error: uninitialized member ‘Scheduler::thresh’ with ‘const’ type ‘const long unsigned int* const’ 

एकाधिक स्रोतों सदस्य चर के लिए रचनाकारों में लगातार सदस्य चर पर चर्चा ऑनलाइन प्रारंभकर्ता सूचियों का उपयोग करने के लिए इंगित करता है। मुझे लगता है कि मैं जो कर रहा हूं वह कर रहा हूं, लेकिन स्पष्ट रूप से यह अभी भी अच्छा नहीं है। क्या कोई देख सकता है कि क्या गलत है?

+0

आपका कोड डिफॉल्ट कन्स्ट्रक्टर के कार्यान्वयन को याद नहीं कर रहा है, जहां त्रुटि से आ रहा है। – visitor

उत्तर

14

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

+0

यह वही है जो मुझे चाहिए था। धन्यवाद! –

6

समस्या डिफ़ॉल्ट निर्माता में है, यह होना चाहिए

Scheduler::Scheduler() : thresh(0) {} 

या नहीं सब पर लागू किया जाये।

0

आपका कोड मेरे लिए काम करता है (MSVC2010) - जैसा कि मुझे विश्वास है कि इसे करना चाहिए। आप किस संकलक के साथ कोशिश कर रहे हैं?
कोड के साथ एक कंपाइलर हो सकता है/एक ही शिकायत एक चेतावनी है कि स्वचालित प्रतिलिपि निर्माता और असाइनमेंट ऑपरेटर को कॉन्स्ट सदस्य के कारण नहीं बनाया जा सकता है।

+0

मुझे लगता है कि आप वीसी ++ के "मूर्खतापूर्ण चेतावनियों" का जिक्र कर रहे हैं। इन चीजों के बारे में चेतावनी देने के लिए यह विशेष रूप से ज्यादा समझ नहीं आता है। – visitor

+0

आपका माइलेज निश्चित रूप से भिन्न हो सकता है ;-) फिर भी, मैं अपने उत्तर में डिफ़ॉल्ट सीटीआर खो रहा था - अन्य पोस्टर यह कहकर सही हैं कि कॉन्स्ट सदस्य को भी आरंभ करने की आवश्यकता है। – BuschnicK

+0

तो मैं चेतावनी कैसे ठीक करूं? मैं 'बूस्ट :: noncopyable' से प्राप्त करता हूं यह इंगित करने के लिए कि कक्षा को प्रतिलिपि/असाइन करने योग्य नहीं माना जाता है ... दो नई चेतावनियां: अब यह अंतर्निहित प्रतिलिपि बनाने वाला नहीं बना सकता है! डी 'ओह। – UncleBens

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