2013-08-25 24 views
12

Genel bir statik yöntem ve özel bir statik üye/değişken içeren basit bir sınıf içeren bir .hpp dosyam olduğunu varsayalım. Bu örnek sınıftır:C++ Özel statik üyeye genel statik yöntemle erişme?

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

Ve dediğim zaman:

int Result = MyClass::DoSomethingWithTheVar(); 

ben "Sonuç" 10 eşit olduğunu beklenebilir;

Onun yerine (satır 10'da) olsun:

undefined reference to `MyClass::TheVar' 

Hat 10 "Thevar = 10;" yöntemden.

Benim sorum özel bir statik üyeye (TheVar) statik bir yöntemden (DoSomethingWithTheVar) erişmek mümkün mü?

+4

işlem yapma veya privateness ile ilgisi var. TheVar'ın tanımının yokluğu ile ilgisi var. Sadece ilan edildi. – sehe

cevap

17

Sorunuza verilen yanıt evet! Bir cpp dosyasında

int MyClass::TheVar = 0; 

: Sadece statik üyesi TheVar tanımlamak için kaçırdı.

One definition rule saygısına uymaktır.

Örnek:

// 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

Cevabınız için teşekkürler :) Bunu denedim, ancak her zaman özel olduğu için TheVar'a erişemediğimi söyleyen bir hata alıyorum. Nedeni, her zaman başlangıçta tür (int) koymayı unutmam gerektiğiydi, böylece derleyici muhtemelen bu özel üyeye erişmek istediğimi düşündü. (Epik hata rahatsız ettiğim için üzgünüm) –

+0

@SanduLiviuCatalin Yani probleminiz şimdi çözüldü mü? Bu çalışmanın [bir örnek] (http://ideone.com/V58sWe) :) –

+0

Evet. Çözdüğüm için işaretleyebilmem için 15 dakika bekliyorum. –

İlgili konular