Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat \'Simbol Tidak Ditakrifkan: \'vtable\' dan \'typeinfo\'\' dalam Program C Saya?

Mengapa Saya Mendapat Ralat \'Simbol Tidak Ditakrifkan: \'vtable\' dan \'typeinfo\'\' dalam Program C Saya?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 16:02:56408semak imbas

Why Am I Getting

Simbol Tidak Ditakrifkan: "vtable" dan "typeinfo"

Soalan:

Apabila menyusun program C, ralat berikut berlaku:

Undefined symbols:
  "vtable for Obstacle"
  "typeinfo for Obstacle"

Apakah maksud simbol ini, dan bagaimanakah ia boleh diselesaikan?

Jawapan:

Dalam C , kaedah maya ialah kaedah yang diisytiharkan dalam kelas asas dan ditindih dalam kelas terbitan. Untuk membenarkan pengikatan dinamik kepada kaedah yang betul semasa masa jalan, pengkompil menjana jadual kaedah maya (vtable) dan menaip maklumat (typeinfo) untuk setiap kelas yang mengandungi kaedah maya.

Ralat menunjukkan bahawa pengkompil tidak dapat cari vtable dan typeinfo untuk kelas Obstacle. Ini boleh berlaku jika:

  • Kelas Obstacle tidak diisytiharkan dengan betul sebagai abstrak, atau
  • Kelas Obstacle mengandungi kaedah maya bukan tulen yang tidak dilaksanakan dalam kelas terbitan.

Untuk menyelesaikan ralat ini, pastikan semua kaedah maya dalam kelas Obstacle diisytiharkan sebagai maya tulen, menggunakan sintaks berikut:

<code class="cpp">virtual void Method() = 0;</code>

Ini menunjukkan bahawa kaedah mesti ditindih dalam kelas terbitan dan ia mungkin tidak mempunyai pelaksanaannya sendiri dalam kelas asas.

Jika kelas Halangan mengandungi sebarang kaedah maya bukan tulen, pastikan ia dilaksanakan dalam kelas terbitan. Jika tidak, pengkompil akan menganggap bahawa mereka mempunyai pelaksanaan di suatu tempat dan menjana vtable dan typeinfo dalam fail objek yang tidak mengandungi pelaksanaan sebenar.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'Simbol Tidak Ditakrifkan: \'vtable\' dan \'typeinfo\'\' dalam Program 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