Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' Apabila Menggunakan Tatasusunan char constexpr statik dalam Kelas C?
Rujukan Tidak Ditakrifkan kepada Static constexpr char[]
Dalam C , apabila mengisytiharkan tatasusunan statik const char dalam kelas dan menggunakannya dalam fungsi ahli, seseorang mungkin menghadapi ralat yang menunjukkan rujukan yang tidak ditentukan. Ralat ini timbul disebabkan oleh pemisahan antara pengisytiharan dan takrifan dalam ahli statik.
Masalah
Pertimbangkan contoh berikut:
// header file (foo.hpp) struct Foo { void bar(); static constexpr char baz[] = "qux"; }; // cpp file (foo.cpp) void Foo::bar() { std::string str(baz); // undefined reference to baz }
Dalam ini contoh, baz tatasusunan char const statik diisytiharkan dalam kelas tetapi tidak ditakrifkan. Menyusun kod dengan GCC akan mengakibatkan ralat "rujukan tidak ditentukan kepada baz."
Penyelesaian
Untuk menyelesaikan isu ini, anda perlu memberikan definisi untuk statik ahli dalam fail cpp. Takrifan ini menentukan kandungan sebenar tatasusunan. Dalam contoh di atas, tambahkan baris berikut pada fail cpp:
constexpr char Foo::baz[];
Penjelasan
Dalam C , ahli statik memerlukan pengisytiharan dan takrifan, yang adalah entiti yang berasingan. Pengisytiharan menentukan jenis dan nama ahli, manakala takrifan menyediakan pelaksanaan atau nilai sebenar.
Untuk ahli statik yang diisytiharkan dalam kelas, pengisytiharan biasanya muncul dalam definisi kelas, bersama-sama dengan mana-mana pemula. Walau bagaimanapun, takrifan mesti disediakan di luar takrifan kelas, biasanya dalam fail cpp yang berasingan atau pada penghujung takrifan kelas.
Dengan memberikan takrifan untuk baz ahli statik, pemaut akan dapat menyelesaikannya. rujukannya dan menjana kod yang diperlukan. Tanpa definisi, pemaut tidak dapat menentukan kandungan sebenar tatasusunan dan akan mengakibatkan ralat rujukan yang tidak ditentukan.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' Apabila Menggunakan Tatasusunan char constexpr statik dalam Kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!