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.