2012-05-10 15 views
8

बनाम यहाँ के बारे में स्थिर बनाम वैश्विक ढेर सारे प्रश्न हैं लेकिन मुझे लगता है मेरे सवाल पर कुछ भिन्न है।साझा फ़ाइलों में स्थैतिक चर: नाम स्थान वर्ग

मैं अगर वहाँ एक चर एक नाम स्थान में रखा साझा करने के लिए एक रास्ता है भर में एक वर्ग के कर सकते हैं में जिस तरह से स्थैतिक चर फ़ाइलें जानना चाहते हैं।

Foo::code = 1,2,3,4 
bar::kode = 0,0,1,1 
: - -

//Foo.cpp 
int Foo::code = 0; 

int Foo::times_two(int in_) 
{ 
    bar::kode++; 
    code++; 
    return 2*in_; 
} 

//main.cpp 
int main() 
{ 
    cout << "Foo::code = " << Foo::code << endl; 

    for(int i=2; i < 6; i++) 
    { 
    cout << "2 x " << i << " = " << Foo::times_two(i) << endl; 
    cout << "Foo::code = " << Foo::code << endl; 
    cout << "bar::kode = " << bar::kode << endl; 

    if(i == 3) 
    { 
     bar::kode++; 
    } 
    } 
} 

सब कोड और कोडे के लिए इस झुकेंगे

//Foo.h 
class Foo 
{ 
    public: 
    static int code; 
    static int times_two(int in_); 
}; 

namespace bar 
{ 
    static int kode; 
} 

:

उदाहरण के लिए, मैं इस कोडित 0

एक बार फिर, वहाँ एक चर एक नाम स्थान भर में जिस तरह से एक वर्ग के कर सकते हैं में स्थैतिक चर फ़ाइलों में रखा साझा करने के लिए एक तरीका है? क्योंकि मैंने सोचा कि मैं अपने आप का उपयोग कर :: अंकन द्वारा वैश्विक चर confliciting से ढाल करने में सक्षम होगा, और सिर्फ पता चला मैं नहीं कर सका कारण मैं पूछ है। और किसी भी आत्म-अपमानजनक प्रोग्रामर की तरह, मेरा मानना ​​है कि मैं इसे गलत कर रहा हूं।

+1

'static' शायद सी में सबसे अतिभारित कीवर्ड ++ है। इसका मतलब उन दोनों संदर्भों में कुछ अलग है। – Flexo

+1

... और इस विशेष मामले में, जो आप चाहते हैं उसके विपरीत। –

उत्तर

19

हाँ: एक class या struct की

//bar.h 
namespace bar 
{ 
    extern int kode; 
} 

बाहर, static एक पूरी अलग अर्थ नहीं है। यह एक प्रतीक आंतरिक जुड़ाव देता है। तो अगर आप static रूप में एक ही चर घोषित, आप वास्तव में एक अलग प्रतिलिपि सभी अनुवाद इकाइयों के लिए, मिल जाएगा एक अनूठा वैश्विक नहीं।

ध्यान दें कि आप चर एक बार प्रारंभ करने की आवश्यकता होगी:

//bar.cpp 
namespace bar 
{ 
    int kode = 1337; 
} 
+4

@Morpork: ध्यान दें कि 'kode' घोषित किया जाता है' extern' यहाँ, नहीं 'static'। वह महत्वपूर्ण है। –

+0

@ जॉन हां, मुझे एहसास हुआ कि कई फाइलें शामिल होने पर कोई सेवन नहीं था। पाठ्यक्रम की एक कक्षा में स्थिर चर के अलावा। बहुत तेज़ प्रतिक्रियाओं के लिए धन्यवाद, सब कुछ। – Morpork

+2

@Morpork मैं वास्तव में नहीं मिलता क्यों लोग बाहरी से बचना चाहते हैं .... –