首頁  >  文章  >  後端開發  >  為什麼我在 C 中收到“MyMessageBox 未命名類型”錯誤?

為什麼我在 C 中收到“MyMessageBox 未命名類型”錯誤?

DDD
DDD原創
2024-11-08 08:58:01824瀏覽

Why Am I Getting

Error: "MyMessageBox does not name a type" in C

使用前向聲明編譯包含類別的程式碼時,確保定義的順序是正確的。

問題定義

考慮以下類別聲明:

class User
{
public:
  MyMessageBox dataMsgBox;
};

class MyMessageBox
{
public:
  void sendMessage(Message *msg, User *recvr);
  Message receiveMessage();
  vector<Message> *dataMessageList;
};

使用 gcc編譯此程式碼可能會導致以下錯誤:

MyMessageBox does not name a type

解釋

編譯器首先遇到 User 類別聲明,但是它會尋找作為成員類型所引用的 MyMessageBox。然而,此時編譯器還沒有遇到MyMessageBox的定義。這會導致“未命名類型”錯誤。

解決方案

要解決此問題,需要確保 MyMessageBox 的定義先於其使用: User 中的成員類型。這是透過向前聲明 User 並將其定義移至 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;
};

此修改允許編譯器知道 User 將在稍後定義,並且 MyMessageBox 是可用作其成員的有效類型。

附加說明

在給定的程式碼中,sendMessage 方法採用指標訊息和使用者。考慮傳遞引用以防止空指標取消引用並確保始終提供訊息和使用者。

void sendMessage(const Message& msg, User& recvr);

以上是為什麼我在 C 中收到“MyMessageBox 未命名類型”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn