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
Linda Hamiltonasal
2024-12-23 04:07:27482semak imbas

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

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!

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