首页 >后端开发 >C++ >为什么我的 C 代码会抛出'MyMessageBox 未命名类型”错误?

为什么我的 C 代码会抛出'MyMessageBox 未命名类型”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-11 15:27:02806浏览

Why Does My C   Code Throw a

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 引用 UserUser 指的是 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn