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

Susan Sarandon
Lepaskan: 2024-11-11 15:27:02
asal
775 orang telah melayarinya

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

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

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

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!

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