Rumah >pembangunan bahagian belakang >C++ >Mengapa Kod C Saya Membuang Ralat 'MyMessageBox Tidak Menamakan Jenis'?

Mengapa Kod C Saya Membuang Ralat 'MyMessageBox Tidak Menamakan Jenis'?

Susan Sarandon
Susan Sarandonasal
2024-11-11 15:27:02806semak imbas

Why Does My C   Code Throw a

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!

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