Ralat "MyMessageBox Tidak Menamakan Jenis" dalam C
Mesej ralat ini berlaku apabila pengkompil menemui ahli kelas yang menggunakan jenis yang masih belum ditakrifkan. Contohnya:
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; };
Dalam kod ini, kelas Pengguna mengandungi ahli jenis MyMessageBox, yang belum ditakrifkan lagi. Apabila pengkompil mencapai baris MyMessageBox dataMsgBox;, ia tidak dapat mengenali MyMessageBox kerana ia tidak mempunyai maklumat tentang definisinya.
Untuk menyelesaikan ralat ini, anda perlu memastikan bahawa kelas yang anda rujuk telah ditakrifkan sebelum anda gunakannya sebagai ahli. Ini dicapai dengan menyusun semula pengisytiharan kelas:
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; }; class User { public: MyMessageBox dataMsgBox; };
Walau bagaimanapun, pengubahsuaian ini memperkenalkan pergantungan kitaran, kerana MyMessageBox merujuk kepada Pengguna dan Pengguna merujuk kepada MyMessageBox. Untuk memecahkan kitaran ini, anda boleh memajukan pengisytiharan Pengguna dalam takrifan MyMessageBox:
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; }; class User; // forward declaration of User User dataMsgBox; // now this line is valid
Pengisytiharan hadapan ini memaklumkan pengkompil bahawa kelas bernama Pengguna wujud, yang membolehkan MyMessageBox memegang rujukan kepada Pengguna walaupun definisi penuhnya belum tersedia.
Atas ialah kandungan terperinci Mengapa Kod C Saya Membuang Ralat 'MyMessageBox Tidak Menamakan Jenis'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!