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

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

DDD
DDDasal
2024-12-09 19:57:15490semak imbas

Why Do I Get

Mengapa "Rujukan Tidak Ditakrifkan kepada Pembina Kelas Templat"?

Kelas templat mentakrifkan pelan tindakan untuk mencipta kelas dengan jenis yang berbeza. Untuk menggunakan kelas templat, anda perlu membuat instantiat dengan jenis tertentu. Dalam kes anda, anda mempunyai dua kelas templat: nodo_colaypila dan cola.

Walau bagaimanapun, pengkompil perlu mengetahui tentang pembina kelas instantiated sebelum menyusun kod. Memandangkan anda tidak menyatakan secara eksplisit kelas templat dengan jenis tertentu, pengkompil tidak tahu pembina mana yang hendak disertakan.

Dua Penyelesaian:

Terdapat dua cara untuk selesaikan isu ini:

Penyelesaian 1: Templat Eksplisit Instantiation

Tambah instantiasi templat eksplisit pada penghujung cola.cpp:

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

Pastikan semua definisi templat berada dalam satu unit terjemahan (fail.cpp) dan instantiation eksplisit berada di hujung fail.

Penyelesaian 2: Alihkan Kod ke Pengepala Fail

Alihkan kod yang melaksanakan fungsi ahli daripada cola.cpp dan nodo_colaypila.cpp ke fail pengepala yang sepadan .h. Melakukannya menjadikan pelaksanaan fungsi tersedia kepada semua unit terjemahan yang termasuk pengepala ini.

Ringkasan:

Pendekatan instantiasi templat eksplisit membolehkan anda mengawal instantiasi jenis tertentu . Pendekatan 'move-code-to-header-files' biasanya digunakan dan menyediakan pelaksanaan kepada semua unit terjemahan. Pilihan bergantung pada keperluan khusus anda dan keperluan projek.

Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Rujukan Tidak Ditakrifkan kepada 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