Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Rujukan Tidak Ditakrifkan kepada Kaedah Maya dan Pembina dalam Ralat Penyambung GCC C Saya?

Mengapa Saya Mendapat Rujukan Tidak Ditakrifkan kepada Kaedah Maya dan Pembina dalam Ralat Penyambung GCC C Saya?

DDD
DDDasal
2024-12-01 21:15:12909semak imbas

Why Am I Getting Undefined References to Virtual Methods and Constructors in My GCC C   Linker Errors?

Menyelesaikan Ralat Penyambung GCC C: Rujukan Tidak Ditakrifkan kepada Kaedah Maya dan Pembina

Ralat pemaut yang dihadapi semasa penyusunan menunjukkan rujukan yang tidak dapat diselesaikan kepada kaedah maya dan pembina dalam projek. Ketiadaan takrifan ini menunjukkan bahawa beberapa pengisytiharan tiada dalam pelaksanaan.

Mengesahkan Keserasian Perpustakaan

  • Mengesahkan Bitness Perpustakaan:

    • Gunakan arahan fail pada fail perpustakaan untuk menyemak jenisnya (cth., fail -b somelib1.a). Ini akan mendedahkan sama ada ia 64-bit atau 32-bit.
  • Memeriksa Kandungan Perpustakaan:

    • Periksa fail pengepala perpustakaan untuk mengesahkan bahawa ia mengandungi kelas dan kaedah yang anda harapkan. Sebagai alternatif, anda boleh menggunakan alat seperti nm untuk menyenaraikan simbol yang ditakrifkan dalam pustaka.

Mengatasi Ralat Penyambung

  • Rujukan Tidak Ditakrifkan kepada Maya Kaedah:

    • Pastikan semua kaedah maya yang diwarisi daripada kelas asas mempunyai takrifan yang sepadan dalam kelas terbitan. Pengkompil mungkin memerlukan takrifan ini walaupun kaedah tidak ditindih secara eksplisit.
  • Rujukan Tidak Ditakrifkan kepada Pembina:

    • Laksanakan pembina untuk kelas yang menyebabkan ralat penyambung. Pembina ditakrifkan secara tersirat apabila tidak diisytiharkan secara manual, tetapi dengan adanya kaedah maya atau pembina kelas asas, takrifan eksplisit diperlukan.

Contoh

Pertimbangkan coretan kod:

class Base
{
public:
    virtual void f() = 0;
};

class Derived : public Base
{
};

Untuk menyelesaikan ralat penyambung, pelaksanaan pembina berikut mesti ditambah pada kelas Terbitan:

Derived::Derived() {}

Pertimbangan Tambahan

  • Semak sama ada bendera pemaut dikonfigurasikan dengan betul untuk mencari laluan yang diperlukan untuk perpustakaan.
  • Sahkan bahawa fail pengepala disertakan dalam projek anda padankan pustaka yang anda cuba pautkan.
  • Jika pustaka pihak ketiga rumit, rujuk dokumentasinya untuk keperluan khusus atau kemungkinan kebergantungan.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Rujukan Tidak Ditakrifkan kepada Kaedah Maya dan Pembina dalam Ralat Penyambung GCC C 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