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
Lepaskan: 2024-12-19 14:13:10
asal
765 orang telah melayarinya

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
}
Salin selepas log masuk

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[];
Salin selepas log masuk

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!

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