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

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

Susan Sarandon
Susan Sarandon原創
2024-11-08 22:05:02444瀏覽

Why Am I Getting the

C 中的「X 未命名型別」錯誤

C 中,遇到「X 未編譯型別」錯誤時,表示表示器無法辨識指定的類型。這種情況經常發生在類別依賴關係中,其中一個類別引用了另一個尚未定義的類別。

考慮以下程式碼:

class User
{
public:
  MyMessageBox dataMsgBox;
};

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

編譯此程式碼時,編譯器會遇到「MyMessageBox 未命名類型」錯誤。這是因為,當編譯器處理 User 類別時,它還沒有遇到 MyMessageBox 的定義。

要解決這個問題,必須顛倒類別定義的順序。然而,這會產生循環依賴,因為 MyMessageBox 的定義現在需要 User 的定義。

要打破循環,可以使用前向聲明。前向聲明允許在定義類別之前對其進行聲明。這允許編譯器識別類別的存在,而不需要其完整定義。

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 的定義引用它。定義了 MyMessageBox 後,就可以完全定義 User 類別了。

此外,考慮更改 MyMessageBox 中的 sendMessage 函數,以對 Message 和 User 參數採用引用而不是指標。這可確保呼叫函數時兩個參數均有效且可用。

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

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

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