Rumah >pembangunan bahagian belakang >C++ >Mengapa Kod C Saya Menghasilkan Ralat 'Rujukan Tidak Ditakrifkan kepada Pembina Kelas Templat'?

Mengapa Kod C Saya Menghasilkan Ralat 'Rujukan Tidak Ditakrifkan kepada Pembina Kelas Templat'?

Barbara Streisand
Barbara Streisandasal
2025-01-02 22:36:40317semak imbas

Why Does My C   Code Produce an

Rujukan Tidak Ditakrifkan kepada Pembina Kelas Templat

Dalam kod C ini, pengkompil menjana ralat "rujukan tidak ditentukan kepada cola(float):: cola()". Ralat ini berlaku kerana pengkompil tidak dapat mencari pelaksanaan pembina untuk cola kelas templat.

Jawapan 1: Instantiasi Templat Eksplisit

Satu penyelesaian adalah dengan menyegerakan secara eksplisit cola kelas templat pada penghujung cola.cpp, memaksanya untuk menyusun konkrit instantiations.

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

Jawapan 2: Kemasukan Fail Pengepala

Sebagai alternatif, pelaksanaan kelas templat boleh dialihkan ke fail pengepala cola.h. Ini memastikan bahawa pelaksanaan tersedia untuk semua unit terjemahan yang termasuk fail pengepala.

Sebab Kemasukan Fail Pengepala

Meletakkan pelaksanaan dalam fail pengepala mengelakkan keperluan untuk instantiasi yang jelas. Ia menjamin bahawa kelas templat dan fungsi ahlinya tersedia untuk setiap unit terjemahan yang termasuk fail pengepala. Pendekatan ini biasanya digunakan untuk kelas templat yang digunakan secara meluas di seluruh pangkalan kod.

Nota Tambahan:

  • Pastikan hanya satu pelaksanaan kelas templat wujud dalam keseluruhan pangkalan kod.
  • Pelaksanaan kelas templat mestilah selepas semua kelas takrifan.
  • Jika kelas templat diisytiharkan dalam berbilang fail pengepala, pelaksanaan hendaklah dimasukkan ke dalam fail pengepala berasingan yang disertakan dalam semua fail pengepala lain di mana kelas templat digunakan.

Atas ialah kandungan terperinci Mengapa Kod C Saya Menghasilkan Ralat 'Rujukan Tidak Ditakrifkan kepada Pembina Kelas Templat'?. 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