Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Mendapat Ralat "X Does Not Name a Type" dalam C ?

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

Susan Sarandon
Susan Sarandonasal
2024-11-08 22:05:02444semak imbas

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;
};

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!

Kenyataan:
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