首页 >后端开发 >C++ >为什么我在 C 中收到'MyMessageBox 未命名类型”错误?

为什么我在 C 中收到'MyMessageBox 未命名类型”错误?

DDD
DDD原创
2024-11-08 08:58:01922浏览

Why Am I Getting

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

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