2010-01-22 15 views
27

में कॉन्स्टेंट स्टेटिक ऐरे शुरू करना मुझे पता चला है कि निम्नलिखित मान्य नहीं है।हैडर फ़ाइल

//Header File 
class test 
{ 
    const static char array[] = { '1', '2', '3' }; 
}; 

इसे आरंभ करने के लिए सबसे अच्छी जगह कहां है?

उत्तर

18
//Header File 
class test 
{ 
    const static char array[]; 
}; 

// .cpp 
const char test::array[] = { '1', '2', '3' }; 
+0

धन्यवाद, था सुनिश्चित नहीं है कि आप सदस्य के बाहर की तरफ कर सकते हैं। – user174084

+8

परिभाषा में कोई स्थिर, कृपया। –

+1

लोग ऐसे कोड को ऊपर क्यों उठा रहे हैं जो स्पष्ट रूप से संकलित नहीं होंगे? –

42

सबसे अच्छी जगह एक स्रोत फ़ाइल

// Header file 
class test 
{ 
    const static char array[]; 
}; 

// Source file 
const char test::array[] = {'1','2','3'}; 

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

class test { 
    static const char array(int index) { 
    static const char a[] = {'1','2','3'}; 
    return a[index]; 
    } 
}; 

एक जोड़े अच्छा बातें:

+0

क्या यह नहीं कहना चाहिए "... कक्षा में * घोषणा * ..."? मैंने सोचा था कि 'एच' घोषणाएं थीं और' सी 'परिभाषाएं थीं, इसलिए एक पूर्णांक प्रकार का संदर्भ क्यों लेना है जिसे केवल शीर्षलेख में घोषित किया गया है संकलक त्रुटि में परिणाम:' परीक्षण :: SOME_INTEGER' के लिए अनिर्धारित संदर्भ? (मुझे एहसास है कि यह सुपर नाइट-पिक्य और पैडेंटिक लगता है, और मैं मुश्किल होने की कोशिश नहीं कर रहा हूं; मैं बस यह सुनिश्चित करना चाहता हूं कि मैं सही शब्दावली का उपयोग कर रहा हूं, इसलिए यदि मैं गलत हूं तो निश्चित रूप से मुझे सही करें)। – dwanderson

22

तुम हमेशा निम्न कर सकते हैं

  • एक cpp फ़ाइल
  • आप रेंज जाँच यदि आप चाहते हैं कर सकते हैं के लिए कोई ज़रूरत नहीं
  • आप static initialization fiasco
के बारे में चिंता करने से बचें 0
+1

मैं कंपाइलर को तब तक प्राप्त नहीं कर सका और एक [1] 'एकाधिक ऑब्जेक्ट्स पर संगत हो सकता था। स्ट्रिंग अक्षर के लिए – Alex

+0

, यह सही है! – sage

+2

आपका लिंक "स्थैतिक प्रारंभिक फ़ियास्को" मर चुका है। – sergiol

5

अब, सी ++ 17 में, आप इनलाइन चर

How do inline variables work?

A simple static data member(N4424):

struct WithStaticDataMember { 
    // This is a definition, no out­of­line definition is required. 
    static inline constexpr const char *kFoo = "foo bar"; 
}; 

अपने उदाहरण में उपयोग कर सकते हैं:

//Header File 
class test 
{ 
    inline constexpr static char array[] = { '1', '2', '3' }; 
}; 

सिर्फ काम करना चाहिए

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