Mengapa Saya Mendapat Ralat 'X Does Not Name a Type' dalam C ?

Susan Sarandon
Lepaskan: 2024-11-08 22:05:02
asal
443 orang telah melayarinya

Why Am I Getting the

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;
};
Salin selepas log masuk

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;
};
Salin selepas log masuk

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);
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan