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!