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
Lepaskan: 2024-12-12 19:58:10
asal
732 orang telah melayarinya

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

Selain itu, masukkan baris berikut dalam nodo_colaypila.cpp:

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;
Salin selepas log masuk

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

sepatutnya:

nodo_colaypila<T>* ult, *pri;
Salin selepas log masuk
  • 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!

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