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?
WindowsTimer::_frequency
?Jawaban:
Anda perlu menentukan
_frequency
dalam file .cpp.yaitu
sumber
Linker tidak tahu ke mana harus mengalokasikan data
_frequency
dan 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
sumber
Dengan C ++ 17, Anda dapat mendeklarasikan variabel Anda secara inline , tidak perlu lagi mendefinisikannya dalam file cpp.
inline static LARGE_INTEGER _frequency;
sumber
error: 'foobar' declared as an 'inline' field
Jika ada variabel statis yang dideklarasikan di dalam kelas maka Anda harus mendefinisikannya di file cpp seperti ini
LARGE_INTEGER WindowsTimer::_frequency = 0;
sumber