Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' Apabila Menggunakan Tatasusunan char constexpr statik dalam Kaedah Kelas?

Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' Apabila Menggunakan Tatasusunan char constexpr statik dalam Kaedah Kelas?

Barbara Streisand
Lepaskan: 2024-12-23 08:41:17
asal
789 orang telah melayarinya

Why Do I Get an

Rujukan Tidak Ditakrifkan kepada Static constexpr char[]

Apabila cuba mengakses tatasusunan aksara constexpr statik dalam kaedah kelas, anda mungkin menghadapi ralat "rujukan tidak ditentukan". Isu ini timbul apabila pengisytiharan dan permulaan tatasusunan berlaku dalam definisi kelas, tetapi definisi itu sendiri ditinggalkan.

Masalah:

// header file (.hpp)
struct foo {
  void bar();
  static constexpr char baz[] = "quz"; // Declaration and initialization
};

// implementation file (.cpp)
void foo::bar() {
  std::string str(baz); // "undefined reference to baz" error
}
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan isu ini, anda mesti memberikan definisi berasingan untuk ahli statik dalam fail pelaksanaan (.cpp) sebagai tambahan kepada pengisytiharan dalam definisi kelas (.hpp):

// implementation file (.cpp)
constexpr char foo::baz[]; // Definition
Salin selepas log masuk

Penjelasan:

Pengkompil memerlukan pengisytiharan dan definisi ahli statik untuk mengetahui lokasi ingatannya dan nilai awalnya. Pengisytiharan dalam definisi kelas hanya menentukan jenis dan nama ahli, manakala definisi menyediakan peruntukan memori dan permulaan sebenar. Dengan mengasingkan definisi daripada pengisytiharan, anda memastikan bahawa pengkompil mempunyai semua maklumat yang diperlukan untuk memautkan ahli kepada definisinya semasa penyusunan.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' Apabila Menggunakan Tatasusunan char constexpr statik dalam Kaedah Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan