में स्टेटिक कॉन्स सदस्य प्रारंभिकता मुझे 'स्थिर कॉन्स' सदस्य प्रारंभिकरण के बारे में कोई समस्या है। एक templated कक्षा में मैं एक कॉन्स सदस्य परिभाषित करता हूं और कक्षा के बाहर इसे शुरू करता हूं।
जब मैं .h फ़ाइल शामिल करता हूं जहां यह वर्ग एकाधिक .cpp फ़ाइलों में कार्यान्वित किया जाता है, तो मुझे LNK2005 त्रुटि (मैं VS2010 का उपयोग कर रहा हूं) जो कहता है कि स्थिरता पहले से ही परिभाषित है।टेम्पलेटेड क्लास
// List.hpp
template <class T>
class List {
static const double TRIM_THRESHOLD;
};
template <class T>
const double List<T>::TRIM_THRESHOLD = 0.8;
मैं एक .cpp फ़ाइल में सदस्य प्रारंभ डालने की कोशिश की, लेकिन फिर मैं कह रही है कि लगातार सब पर परिभाषित नहीं है एक लिंकर त्रुटि मिलती है। यदि सूची templated नहीं है और मैं एक .cpp फ़ाइल में प्रारंभिक डाल दिया, सब ठीक है।
क्या इस स्थिति के लिए कोई समाधान है? मेरे पास पहले से फाइल के चारों ओर क्लॉज # ifdef/परिभाषित है, और यह निश्चित रूप से समाधान नहीं है।
आप परिभाषा में 'कॉन्स्ट' संशोधक गायब हैं। – Ropez
क्या आप वाकई अपना कोड चाहते हैं? आपको कोई त्रुटि नहीं मिलनी चाहिए। @ रोपेज़: 'कॉन्स्ट' केवल घोषणा में मायने रखता है। – GManNickG
दिलचस्प बात यह है कि वीएस2015 में यह समस्या नहीं है। यह किसी भी तरह से अनुकूलित/समझ सकता है कि स्थिर कॉन्स परिभाषा वास्तव में एक ही चीज़ है और लिंकर में त्रुटि को ध्वजांकित नहीं करती है। – Menace