Ralat: "MyMessageBox tidak menamakan jenis" dalam C
Apabila menyusun kod yang termasuk kelas menggunakan pengisytiharan hadapan, adalah penting untuk memastikan bahawa susunan definisi adalah betul.
Masalah Definisi
Pertimbangkan pengisytiharan kelas berikut:
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; };
Menyusun kod ini dengan gcc boleh membawa kepada ralat berikut:
MyMessageBox does not name a type
Penjelasan
Pengkompil menemui pengisytiharan kelas Pengguna dahulu, tetapi ia mendapati MyMessageBox dirujuk sebagai jenis ahli. Walau bagaimanapun, pada ketika ini, pengkompil masih belum menemui definisi MyMessageBox. Ini mengakibatkan ralat "tidak menamakan jenis".
Penyelesaian
Untuk menyelesaikan isu ini, seseorang perlu memastikan bahawa takrifan MyMessageBox mendahului penggunaannya sebagai jenis ahli dalam Pengguna. Ini dicapai dengan mengisytiharkan Pengguna ke hadapan dan mengalihkan takrifnya di bawah MyMessageBox.
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; };
Pengubahsuaian ini membolehkan pengkompil mengetahui bahawa Pengguna akan ditakrifkan kemudian dan bahawa MyMessageBox ialah jenis yang sah untuk digunakan sebagai ahlinya.
Nota Tambahan
Dalam kod yang diberikan, kaedah sendMessage mengambil penunjuk kepada Mesej dan Pengguna. Pertimbangkan untuk menghantar rujukan sebaliknya untuk mengelakkan penyahrujukan penuding nol dan memastikan mesej dan pengguna sentiasa disediakan.
void sendMessage(const Message& msg, User& recvr);
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'MyMessageBox tidak menamakan jenis' dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!