Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' dengan Tatasusunan Char constexpr Statik dalam C ?

Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' dengan Tatasusunan Char constexpr Statik dalam C ?

Linda Hamilton
Lepaskan: 2024-12-23 04:07:27
asal
481 orang telah melayarinya

Why Do I Get an

Rujukan Tidak Ditakrifkan kepada Static constexpr Char Array: Memahami Isu Rujukan Tidak Ditakrifkan

Dalam bahasa pengaturcaraan C, adalah mungkin untuk mentakrifkan pemalar statik tatasusunan aksara dalam kelas. Walau bagaimanapun, pembangun mungkin menghadapi ralat "rujukan tidak ditentukan" semasa cuba merujuk tatasusunan sedemikian dalam kod mereka. Ralat ini berlaku kerana pengkompil memerlukan pengisytiharan dan definisi ahli statik.

Untuk menyelesaikan isu ini, kod harus diubah suai seperti berikut. Dalam definisi kelas (fail.hpp), pengisytiharan dan permulaan tatasusunan statik harus kekal di dalam kelas. Dalam fail pelaksanaan (fail .cpp), baris yang berasingan harus ditambah untuk memberikan definisi tatasusunan statik.

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

// .cpp
void foo::bar() {
  std::string str(baz); // now compiles successfully
}

constexpr char foo::baz[]; // definition of static member
Salin selepas log masuk

Dengan memberikan definisi ahli statik secara berasingan, pengkompil boleh memautkan rujukan kepada tatasusunan dengan betul, menyelesaikan ralat rujukan yang tidak ditentukan. Pemisahan antara pengisytiharan dan takrifan ini adalah perlu kerana saiz tatasusunan mesti diketahui semasa penyusunan, manakala permulaannya boleh ditangguhkan sehingga kemudian.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan' dengan Tatasusunan Char constexpr Statik dalam 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