Statik bir üyeye tanımsız başvuru


91

Çapraz derleyici kullanıyorum. Benim kodum:

class WindowsTimer{
public:
  WindowsTimer(){
    _frequency.QuadPart = 0ull;
  } 
private:
  static LARGE_INTEGER _frequency;
};

Aşağıdaki hatayı alıyorum:

`` WindowsTimer :: _ frekansına '' tanımsız başvuru

Ben de değiştirmeyi denedim

LARGE_INTEGER _frequency.QuadPart = 0ull;

veya

static LARGE_INTEGER _frequency.QuadPart = 0ull;

ama yine de hatalar alıyorum.

kimse neden biliyor?



(Eğer varsa) nerede tanımladınız WindowsTimer::_frequency ?
CB Bailey

@CharlesBailey Sınıftaki tek üyem.
kakush

Yanıtlar:


107

_frequency.Cpp dosyasında tanımlamanız gerekir .

yani

LARGE_INTEGER WindowsTimer::_frequency;

Bunu neden yapmalıyım?
nowox

35

Bağlayıcı, verileri nereye tahsis edeceğini bilmez _frequencyve bunu manuel olarak söylemeniz gerekir. Bunu, bu satırı: LARGE_INTEGER WindowsTimer::_frequency = 0;C ++ kaynaklarınızdan birine basitçe ekleyerek başarabilirsiniz .

Burada daha ayrıntılı açıklama


29

C ++ 17 ile değişkeninizi satır içi olarak bildirebilirsiniz , artık bir cpp dosyasında tanımlamanıza gerek kalmaz.

inline static LARGE_INTEGER _frequency;

Bu bana bir hata veriyorerror: 'foobar' declared as an 'inline' field
Pedro Henrique

3
NVM, GCC'mi MinGW yöneticisi aracılığıyla 6.3'ten 8.2'ye güncelledim ve iyi çalışıyor.
Pedro Henrique

24

Sınıfın içinde tanımlanmış bir statik değişken varsa, bunu cpp dosyasında şu şekilde tanımlamalısınız

LARGE_INTEGER WindowsTimer::_frequency = 0;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.