Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan kepada' untuk Pembina Kelas Templat dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan kepada' untuk Pembina Kelas Templat dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2024-12-12 19:58:10734semak imbas

Why Do I Get

"Rujukan Tidak Ditakrifkan kepada" Pembina Kelas Templat [Pendua]

Ralat pengkompil "rujukan tidak ditentukan kepada..." untuk pembina kelas templat menandakan kekurangan instantiasi yang jelas arahan untuk kelas templat khusus yang digunakan dalam program. Isu ini timbul kerana pengkompil tidak menyusun kod templat secara automatik sehingga ia diperlukan secara eksplisit.

Penyelesaian 1: Instantiasi Templat Eksplisit

Tambahkan pernyataan instantiasi templat eksplisit ke penghujung fail pelaksanaan (cola .cpp dalam kes ini):

template class cola<float>;
template class cola<string>;

Selain itu, masukkan baris berikut dalam nodo_colaypila.cpp:

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;

Ini memaksa pengkompil untuk menyusun kelas templat yang diperlukan.

Penyelesaian 2: Sertakan Pelaksanaan dalam Fail Pengepala

Alihkan kod pelaksanaan daripada cola .cpp dan nodo_colaypila.cpp ke dalam cola.h dan nodo_colaypila.h, masing-masing. Ini memastikan ketersediaan definisi fungsi dalam semua unit terjemahan menggunakan kelas templat.

Kebaikan dan Keburukan Setiap Penyelesaian:

  • Penyelesaian 1:

    • Pro: Lebih cekap kerana ia hanya menyusun templat yang diperlukan instance.
    • Con: Memerlukan instantiation manual untuk setiap kelas templat yang diingini.
  • Penyelesaian 2:

    • Pro: Lebih mudah dan fleksibel, kerana ia membenarkan kelas templat masa hadapan instantiations.
    • Con: Penyusunan yang berpotensi lebih perlahan disebabkan penjanaan kod pendua untuk setiap unit terjemahan.

Lain Taip dalam Kod:

  • Sintaks penunjuk tidak sepadan dalam cola.h pengisytiharan:
nodo_colaypila<T><T>* ult, pri;

sepatutnya:

nodo_colaypila<T>* ult, *pri;
  • Tiada #endif pada penghujung nodo_colaypila.h.
  • Parameter lalai untuk nodo_colaypila pembina harus ditakrifkan dalam fail pengepala, bukan pelaksanaan fail.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Rujukan Tidak Ditakrifkan kepada' untuk Pembina Kelas Templat dan Bagaimana Saya Boleh Membetulkannya?. 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