template<typename T, typename C = vector<T>>
class stack{
    ...
    friend class stack_array;
};

template<typename T, typename C = vector<T>, typename K = stack<T,C>>
class stack_array{
     ...
     static const size_t max_elem;
     array<K, max_elem> store;
     ...
};

template<typename T, typename C = vector<T>, typename K = stack<T,C>>
const size_t stack_array<T,C,K>::max_elem = 10;

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

error: the value of ‘stack_array<T, C, K>::max_elem’ is not usable in a constant expression
array<K, max_elem> store;
                ^
note: ‘stack_array<T, C, K>::max_elem’ was not initialized with a constant expression
static const size_t max_elem;

मुझे लगता है कि यह त्रुटि तब होती है जब स्थिर कॉन्स वैरिएबल max_elem टेम्पलेट क्लास परिभाषा के बाद प्रारंभ किया जाता है। क्या यह समझ सही है? क्या max_elem के वर्तमान उपयोग को आवश्यक रूप से बदले बिना इस त्रुटि को हल करने का कोई तरीका है?

1
Vinod 8 जुलाई 2019, 07:58

1 उत्तर

सबसे बढ़िया उत्तर

मैं स्थिर सदस्य को सही जगह पर प्रारंभ करने के लिए कहूंगा।

static const size_t max_elem = 10;

अधिक यहां

स्थिर स्थिर सदस्य यदि इंटीग्रल या एन्यूमरेशन प्रकार के एक स्थिर डेटा सदस्य को कॉन्स्टेबल (और अस्थिर नहीं) घोषित किया जाता है, तो इसे एक इनिशियलाइज़र के साथ इनिशियलाइज़ किया जा सकता है जिसमें हर एक्सप्रेशन एक निरंतर एक्सप्रेशन है, ठीक क्लास डेफिनिशन के अंदर:

struct X {
     const static int n = 1;
     const static int m{2}; // since C++11
     const static int k; }; 

     const int X::k = 3; // Only this needs to be defined
1
Michael Chourdakis 8 जुलाई 2019, 05:04