C 中的“MyMessageBox 未命名类型”错误
当编译器遇到使用类型的类成员时,会出现此错误消息尚未定义。例如:
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; };
在此代码中,User 类包含类型为 MyMessageBox 的成员,该成员尚未定义。当编译器到达 MyMessageBox dataMsgBox; 行时,它无法识别 MyMessageBox,因为它没有有关其定义的信息。
要解决此错误,您需要确保您引用的类在您之前已定义。使用它作为会员。这是通过重新排序类声明来实现的:
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; }; class User { public: MyMessageBox dataMsgBox; };
但是,此修改引入了循环依赖关系,因为 MyMessageBox 引用 User 和 User 指的是 MyMessageBox。要打破这个循环,你可以在 MyMessageBox 的定义中转发声明 User:
class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message *> dataMessageList; }; class User; // forward declaration of User User dataMsgBox; // now this line is valid
这个转发声明通知编译器有一个名为 的类User 存在,这允许 MyMessageBox 保存对用户,尽管其完整定义尚不可用。
以上是为什么我的 C 代码会抛出'MyMessageBox 未命名类型”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!