2013-08-25 22 views
12

मान लें कि मेरे पास एक .hpp फ़ाइल है जिसमें एक सार्वजनिक स्थिर विधि और एक निजी स्थैतिक सदस्य/चर के साथ एक साधारण वर्ग है। यह एक उदाहरण वर्ग है:सी ++ सार्वजनिक स्थैतिक विधि से निजी स्थिर सदस्य तक पहुंचें?

class MyClass 
{ 
public: 
    static int DoSomethingWithTheVar() 
    { 
     TheVar = 10; 
     return TheVar; 
    } 
private: 
    static int TheVar; 
} 

और जब मैं फोन:

int Result = MyClass::DoSomethingWithTheVar(); 

मैं उम्मीद होती है कि "परिणाम" 10 के बराबर है;

इसके बजाय मैं (लाइन 10 पर) मिलती है:

undefined reference to `MyClass::TheVar' 

रेखा 10 है "थेवर = 10;" विधि से

मेरा प्रश्न यह है कि यदि एक स्थिर विधि (DoSomethingWithTheVar) से एक निजी स्थिर सदस्य (TheVar) तक पहुंचना संभव है?

+4

यह पहुँच या गोपनीयता के साथ कुछ नहीं मिला है। इसे 'थवार' की परिभाषा की अनुपस्थिति के साथ करना है। यह केवल घोषित किया गया है। – sehe

उत्तर

17

आपके प्रश्न का उत्तर हाँ है!

int MyClass::TheVar = 0; 

एक cpp फ़ाइल में: तुम बस स्थिर सदस्य TheVar परिभाषित करने के लिए याद किया।

यह One definition rule का सम्मान करना है।

उदाहरण:

// Myclass.h 
class MyClass 
{ 
public: 
    static int DoSomethingWithTheVar() 
    { 
     TheVar = 10; 
     return TheVar; 
    } 
private: 
    static int TheVar; 
}; 

// Myclass.cpp 
#include "Myclass.h" 

int MyClass::TheVar = 0; 
+0

उत्तर के लिए धन्यवाद :) मैंने कोशिश की कि हालांकि मुझे हमेशा एक त्रुटि मिलती है कि मैं TheVar तक नहीं पहुंच सकता क्योंकि यह निजी था। कारण यह था कि मैं हमेशा शुरुआत में टाइप (int) डालना भूल गया था इसलिए संकलक शायद सोचा था कि मैं उस निजी सदस्य तक पहुंचना चाहता हूं। (एपिक गलती परेशान करने के लिए खेद है) –

+0

@SanduLiviuCatalin तो आपकी समस्या अब हल हो गई है? [एक उदाहरण] (http://ideone.com/V58sWe) इस कामकाजी :) –

+0

हां। मैं 15 मिनट का बनने का इंतजार कर रहा हूं ताकि मैं इसे सुलझाने के रूप में चिह्नित कर सकूं। –

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