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 }
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
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!