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中文网其他相关文章!