Rumah > pembangunan bahagian belakang > C++ > Mengapa GCC Gagal Mengenali Ahli Kelas Asas dalam Kelas Templat?

Mengapa GCC Gagal Mengenali Ahli Kelas Asas dalam Kelas Templat?

Barbara Streisand
Lepaskan: 2024-11-02 17:12:02
asal
564 orang telah melayarinya

Why Does GCC Fail to Recognize Base Class Members in Template Classes?

Isu Penyusunan GCC: Kebolehcapaian Ahli Kelas Asas dalam Kelas Templat

Apabila menyusun hierarki kelas templat, GCC kadangkala menghadapi ralat yang tidak timbul dalam penyusun lain. Satu ralat sedemikian berlaku apabila cuba mengakses ahli kelas asas yang bergantung pada hujah templat.

Pertimbangkan coretan kod berikut:

<code class="cpp">template <typename T> class A {
public:
    T foo;
};

template <typename T> class B: public A<T> {
public:
    void bar() { cout << foo << endl; } // Error in GCC
};
Salin selepas log masuk

Menyusun kod ini dengan GCC menghasilkan ralat :

error: ‘foo’ was not declared in this scope
Salin selepas log masuk

Walaupun wujud logik ahli foo dalam kelas asas, GCC gagal mengenalinya tanpa menyatakan kelas asas secara eksplisit atau menggunakan penuding ini. Percanggahan ini berpunca daripada versi terdahulu spesifikasi C, yang membenarkan inferens ahli kelas asas melalui penghuraian. Walau bagaimanapun, kemas kini berikutnya pada spesifikasi menjelaskan bahawa inferens sedemikian boleh membawa kepada konflik.

Untuk menyelesaikan isu ini, terdapat dua pendekatan yang disyorkan:

  1. Gunakan penuding ini untuk mengakses pangkalan ahli kelas:
<code class="cpp">void bar() { cout << this->foo << endl; }</code>
Salin selepas log masuk
  1. Rujuk kelas asas secara eksplisit dalam akses ahli:
<code class="cpp">void bar() { cout << A<T>::foo << endl; }</code>
Salin selepas log masuk

Tingkah laku ini didokumenkan dalam manual GCC, yang menyediakan maklumat tambahan untuk menyelesaikan isu yang serupa. Dengan menggunakan teknik ini, pembangun boleh memastikan kejayaan penyusunan hierarki kelas templat dengan kebergantungan ahli.

Atas ialah kandungan terperinci Mengapa GCC Gagal Mengenali Ahli Kelas Asas dalam Kelas 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