Referensi tidak ditentukan ke anggota statis


91

Saya menggunakan kompiler silang. Kode saya adalah:

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

Saya mendapatkan kesalahan berikut:

referensi yang tidak ditentukan ke `WindowsTimer :: _ frekuensi '

Saya juga mencoba mengubahnya menjadi

LARGE_INTEGER _frequency.QuadPart = 0ull;

atau

static LARGE_INTEGER _frequency.QuadPart = 0ull;

tapi saya masih mendapatkan kesalahan.

ada yang tahu kenapa?



Di mana (jika ada) yang Anda tentukan WindowsTimer::_frequency ?
— CB Bailey

@CharlesBailey Ini satu-satunya anggota saya di kelas.
— kakush

Jawaban:


107

Anda perlu menentukan _frequencydalam file .cpp.

yaitu

LARGE_INTEGER WindowsTimer::_frequency;

Mengapa saya harus melakukannya?
— nowox

35

Linker tidak tahu ke mana harus mengalokasikan data _frequencydan Anda harus memberitahukannya secara manual. Anda dapat melakukannya dengan menambahkan baris ini: LARGE_INTEGER WindowsTimer::_frequency = 0;ke salah satu sumber C ++ Anda.

Penjelasan lebih detail ada di sini


28

Dengan C ++ 17, Anda dapat mendeklarasikan variabel Anda secara inline , tidak perlu lagi mendefinisikannya dalam file cpp.

inline static LARGE_INTEGER _frequency;

Ini memberi saya kesalahanerror: 'foobar' declared as an 'inline' field
— Pedro Henrique

3
NVM, saya baru saja memperbarui GCC saya melalui manajer MinGW dari 6,3 menjadi 8,2 dan berfungsi dengan baik.
— Pedro Henrique

24

Jika ada variabel statis yang dideklarasikan di dalam kelas maka Anda harus mendefinisikannya di file cpp seperti ini

LARGE_INTEGER WindowsTimer::_frequency = 0;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.