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