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

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

Susan Sarandon
Susan Sarandonasal
2024-12-19 14:13:10767semak imbas

Why Do I Get an

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!

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