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

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

Susan Sarandon
Susan Sarandon原创
2024-11-08 22:05:02505浏览

Why Am I Getting the

C 中的“X 未命名类型”错误

C 中,遇到“X 未命名类型”错误时,表明编译器无法识别指定的类型。这种情况经常发生在类依赖关系中,其中一个类引用了另一个尚未定义的类。

考虑以下代码:

class User
{
public:
  MyMessageBox dataMsgBox;
};

class MyMessageBox
{
public:
  void sendMessage(Message *msg, User *recvr);
  Message receiveMessage();
  vector<Message> *dataMessageList;
};

编译此代码时,编译器将遇到“MyMessageBox 未命名类型”错误。这是因为,当编译器处理 User 类时,它还没有遇到 MyMessageBox 的定义。

要解决这个问题,必须颠倒类定义的顺序。然而,这会产生循环依赖,因为 MyMessageBox 的定义现在需要 User 的定义。

要打破循环,可以使用前向声明。前向声明允许在定义类之前对其进行声明。这允许编译器识别类的存在,而不需要其完整定义。

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 的定义引用它。定义了 MyMessageBox 后,就可以完全定义 User 类了。

此外,考虑更改 MyMessageBox 中的 sendMessage 函数,以对 Message 和 User 参数采用引用而不是指针。这可确保调用函数时两个参数均有效且可用。

void sendMessage(const Message& msg, User& recvr);

以上是为什么我在 C 中收到'X 未命名类型”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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