Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan kepada Ahli Statik' Semasa Kompilasi Silang?

Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan kepada Ahli Statik' Semasa Kompilasi Silang?

Patricia Arquette
Patricia Arquetteasal
2024-12-18 20:46:10606semak imbas

Why Do I Get

Rujukan Tidak Selesai kepada Ahli Statik dalam Kompilasi Silang

Apabila bekerja dengan penyusun silang, adalah perkara biasa untuk menghadapi ralat yang berkaitan dengan rujukan statik yang tidak dapat diselesaikan ahli. Ini berlaku apabila pembolehubah statik diisytiharkan dalam pengepala kelas tetapi tidak ditakrifkan dalam fail .cpp yang sepadan.

Penjelasan Masalah:

Pertimbangkan contoh kod yang disediakan:

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

Pembolehubah statik _frekuensi diisytiharkan dalam definisi kelas tetapi tidak ditakrifkan. Apabila cuba membina kod, pemaut gagal menyelesaikan rujukan kepada _frequency, mengakibatkan ralat rujukan tidak ditentukan.

Penyelesaian:

Untuk menyelesaikan isu ini, pembolehubah statik mesti ditakrifkan dalam fail .cpp yang sepadan. Ini boleh dilakukan seperti berikut:

// WindowsTimer.cpp
LARGE_INTEGER WindowsTimer::_frequency;

Penaakulan:

Pembolehubah statik, tidak seperti pembolehubah contoh, dikongsi antara semua kejadian kelas. Oleh itu, mereka memerlukan definisi tunggal dalam program. Dengan mentakrifkan pembolehubah statik dalam fail .cpp, pemaut boleh berjaya mencari dan menyelesaikan rujukan kepadanya.

Nota Tambahan:

  • Mesej ralat "rujukan tidak ditentukan kepada WindowsTimer::_frequency'" secara jelas menunjukkan bahawa penyambung tidak dapat mencari definisi untuk pembolehubah _frequency dalam konteks kelas WindowsTimer`.
  • Mengubah suai pengisytiharan _frequency sebagai LARGE_INTEGER _frequency.QuadPart = 0ull; atau statik LARGE_INTEGER _frequency.QuadPart = 0ull; tidak akan menyelesaikan isu tersebut, kerana pengisytiharan ini hanya digunakan pada contoh individu _frequency dalam objek dan bukan pada definisi statik.
  • Adalah penting untuk memastikan bahawa takrifan pembolehubah statik dalam fail .cpp sepadan pengisytiharan dalam fail pengepala. Ketidakpadanan boleh membawa kepada tingkah laku yang tidak dijangka atau ralat kompilasi.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan kepada Ahli Statik' Semasa Kompilasi Silang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn