Rumah >pembangunan bahagian belakang >C++ >Mengapa typedef saya dalam templat kelas asas tidak boleh diakses dalam templat kelas terbitan saya?

Mengapa typedef saya dalam templat kelas asas tidak boleh diakses dalam templat kelas terbitan saya?

Patricia Arquette
Patricia Arquetteasal
2024-12-09 15:51:10781semak imbas

Why is my typedef in a base class template inaccessible in my derived class template?

Typedef Tidak Diiktiraf dalam Templat Kelas Terbitan

Apabila mengisytiharkan templat kelas terbitan B yang mewarisi daripada templat kelas asas A, adalah dijangkakan bahawa typedef yang ditakrifkan dalam A akan boleh diakses dalam B. Walau bagaimanapun, dalam contoh yang diberikan, mengakses Vec_t dalam B gagal dengan ralat bahawa ia tidak diiktiraf.

Menurut Piawaian C (14.6.2/3), dalam definisi templat kelas dan takrif ahli, pencarian nama yang tidak layak tidak dilanjutkan ke kelas asas yang bergantung pada parameter templat. Ini bermakna akses tidak layak kepada typedef yang ditakrifkan dalam kelas asas tidak dibenarkan dalam templat kelas terbitan.

Untuk menyelesaikan isu ini, nama penuh typedef mesti digunakan dalam templat kelas terbitan. Ini boleh dicapai dengan menyatakan secara eksplisit skop kelas asas seperti berikut:

typename A<T>::Vec_t v;

Dengan melayakkan nama secara eksplisit dengan skop kelas asas, pengkompil boleh menyelesaikan dengan betul rujukan kepada typedef Vec_t yang ditakrifkan dalam kelas asas templat.

Atas ialah kandungan terperinci Mengapa typedef saya dalam templat kelas asas tidak boleh diakses dalam templat kelas terbitan saya?. 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