Mengapa pengkompil gagal untuk menyusun apabila menggunakan fungsi ahli templat dalam fungsi templat?

Patricia Arquette
Lepaskan: 2024-11-02 16:08:29
asal
762 orang telah melayarinya

Why does the compiler fail to compile when invoking a template member function within a template function?

Invokasi Fungsi Ahli Templat dalam Fungsi Templat

Coretan kod yang disediakan menunjukkan ralat yang dihadapi semasa menggunakan fungsi ahli templat dari dalam fungsi templat :

<code class="cpp">template<class X> struct A {
   template<int I> void f() {}
};

template<class T> void g()
{
   A<T> a;
   a.f<3>();  // Compilation fails here
}</code>
Salin selepas log masuk

Pengkompil gagal untuk menyusun kod ini, melaporkan ralat berkaitan kepada penggunaan ahli yang tidak sah dan mencadangkan bahawa '&' mungkin telah dilupakan.

Penjelasan

Ralat berlaku kerana kod cuba menggunakan templat ahli tanpa secara eksplisit menyatakan kata kunci 'template' sebelum itu. Menurut C Standard (14.2/4), apabila nama pengkhususan templat ahli digunakan selepas titik atau anak panah dalam ungkapan postfix, atau selepas penentu nama bersarang dalam id yang layak dan ungkapan postfix atau qualified-id secara eksplisit bergantung pada parameter template, nama template ahli mesti diawali dengan kata kunci 'template.' Jika tidak, nama itu akan diandaikan merujuk kepada bukan templat.

Penyelesaian

Untuk menyelesaikan isu ini, kod mesti diubah suai untuk menyatakan secara eksplisit 'templat ' kata kunci sebelum nama templat ahli:

<code class="cpp">template<class T> void g()
{
   A<T> a;
   a.template f<3>();  // add 'template' keyword here
}</code>
Salin selepas log masuk

Dengan pengubahsuaian ini, pengkompil akan dapat mengenal pasti dengan betul dan gunakan fungsi templat ahli, dan kod akan berjaya disusun.

Atas ialah kandungan terperinci Mengapa pengkompil gagal untuk menyusun apabila menggunakan fungsi ahli templat dalam fungsi templat?. 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