Ralat "X Tidak Menamakan Jenis" dalam C
Dalam C , apabila menghadapi ralat "X tidak menamakan jenis" , ia menunjukkan bahawa pengkompil tidak dapat mengenali jenis yang ditentukan. Ini sering berlaku dengan kebergantungan kelas, di mana kelas merujuk kelas lain yang masih belum ditentukan.
Pertimbangkan kod berikut:
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; };
Apabila menyusun kod ini, pengkompil akan menemui ralat "MyMessageBox tidak menamakan jenis". Ini kerana, apabila pengkompil memproses Pengguna kelas, ia masih belum menemui definisi MyMessageBox.
Untuk menyelesaikan isu ini, susunan takrifan kelas mesti diterbalikkan. Walau bagaimanapun, ini mewujudkan pergantungan kitaran, kerana takrifan MyMessageBox kini memerlukan takrifan Pengguna.
Untuk memecahkan kitaran, pengisytiharan hadapan boleh digunakan. Pengisytiharan hadapan membenarkan kelas diisytiharkan sebelum ia ditakrifkan. Ini membolehkan pengkompil mengenali kewujudan kelas tanpa memerlukan takrifan penuhnya.
class User; // Forward declaration of User class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; }; class User { public: MyMessageBox dataMsgBox; };
Dalam kod yang diubah suai ini, Pengguna kelas diisytiharkan ke hadapan, membenarkan takrifan MyMessageBox merujuknya. Selepas takrifan MyMessageBox, pengguna kelas boleh ditakrifkan sepenuhnya.
Selain itu, pertimbangkan untuk menukar fungsi sendMessage dalam MyMessageBox untuk mengambil rujukan dan bukannya penunjuk untuk kedua-dua parameter Mesej dan Pengguna. Ini memastikan bahawa kedua-dua hujah adalah sah dan tersedia apabila memanggil fungsi.
void sendMessage(const Message& msg, User& recvr);
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'X Does Not Name a Type' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!