Rumah > pembangunan bahagian belakang > C++ > Mengapa Kod C Saya Menghasilkan Ralat 'rujukan tidak jelas kepada typeinfo'?

Mengapa Kod C Saya Menghasilkan Ralat 'rujukan tidak jelas kepada typeinfo'?

DDD
Lepaskan: 2024-12-04 12:34:10
asal
666 orang telah melayarinya

Why Does My C   Code Produce

Memahami Ralat "g undefined reference to typeinfo"

Apabila menghadapi ralat pemaut "undefined reference to typeinfo", adalah penting untuk menyelidiki sebab asas di sebalik mesej ini. Satu punca yang berpotensi terletak pada mengisytiharkan fungsi maya tanpa memberikan takrifannya.

Fungsi maya membenarkan polimorfisme, membolehkan kelas terbitan mengatasi dan menyediakan pelaksanaan berbeza untuk kaedah yang diwarisi daripada kelas asasnya. Walau bagaimanapun, apabila fungsi maya diisytiharkan tanpa definisi, pengkompil menunjukkan bahawa pelaksanaan disediakan di tempat lain. Ini bermakna pemaut akan cuba mencari definisi yang hilang semasa peringkat pemautan, merujuk unit kompilasi atau pustaka lain.

Untuk menghapuskan ralat ini, fungsi maya mesti disertakan dengan definisi. Ini mengaitkan pengisytiharan fungsi dengan pelaksanaannya, menghalang pemaut daripada cuba menyelesaikan rujukan kemudian. Fungsi maya yang ditakrifkan muncul sebagai:

virtual void fn() { /* insert code here */ }
Salin selepas log masuk

Sebaliknya, pengisytiharan fungsi maya tanpa definisi menyerupai:

virtual void fn();
Salin selepas log masuk

Pengisytiharan ini gagal memberikan definisi, mengakibatkan "undefined rujukan kepada ralat typeinfo".

Secara analog, ia adalah setanding dengan mengisytiharkan pembolehubah luaran tanpa mentakrifkan ia:

extern int i;
int *pi = &i;
Salin selepas log masuk

Dalam keadaan ini, pengkompil menunjukkan bahawa integer 'i' diisytiharkan di tempat lain dan mesti diselesaikan semasa memaut. Jika tidak, pi tidak boleh merujuk kepada alamatnya.

Atas ialah kandungan terperinci Mengapa Kod C Saya Menghasilkan Ralat 'rujukan tidak jelas kepada typeinfo'?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan