Sınıfın static üyeleri sınıf için tek bir örnekte mevcut olup, tüm nesneler için ortak bir değerdir.
int Foo::count = 0;). Sınıf içinde bildiriyoruz, ancak tanımlıyoruz dışında.this) erişimleri yoktur, yalnızca diğer static üyelere erişebilirler.class Counter { public: static int count; static void increment() { ++count; } }; int Counter::count = 0; int main() { Counter::increment(); Counter c1, c2; c1.increment(); // count == 2 }
«Static bir üyenin tanımı başlık dosyasında olabilir mi? Hangi riskler ortaya çıkar?»
Cevap: Evet, tanım (int Foo::value = 0;) başlık dosyası içinde teknik olarak mümkündür, ancak bu başlık birden çok çeviri birimine dahil edilecek olursa, çoğaltma (multiple definition) ile sonuçlanır ve bu da bağlantı hatalarına neden olur. Bu nedenle, static üyelerin yalnızca bir cpp dosyasında tanımlanması gerekir.
Hikaye
Kütüphane kodunda bir static üye doğrudan başlık dosyasında tanımlandı. Çoklu dahil etme, bağlantı hatalarına neden oldu: "multiple definition of ...". Tanımın ayrı bir cpp dosyasına taşınmasıyla sorun ortadan kalktı.
Hikaye
Eğitim projesinde bir static üye bildirildi, ancak onu dış cpp dosyasında tanımayı unuttular. Başlık dosyalarında hata olmamasına rağmen, bağlantıda unresolved external symbol hatası ortaya çıktı. Kayıp tanımı bulmak ve eklemek gerekiyordu.
Hikaye
Büyük bir gömülü sistemde hesaplanan bir değerle static üyenin başlatılmasında hata yapıldı (kod yürütülmesini gerektiren bir ifade ile başlatmaya çalıştılar). Mantığı ayrı bir başlatma fonksiyonuna ayırdılar, ancak dikkat eksikliği nedeniyle, bu fonksiyonu ilk erişimden önce çağırmayı unuttular — sonuç, başlatılmamış değişkenler ve erratic behaviordur.