首頁 > 後端開發 > C++ > 主體

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

DDD
發布: 2024-11-08 08:58:01
原創
892 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板