如何包含已经包含我当前标题的其他标头

How can I include other header the already include my current header

本文关键字:标题 其他 何包含 包含我      更新时间:2023-10-16

>我有一个关于包含标题的快速问题我的情况是我想构建 2 个类,它们都持有指向另一个类的指针。它们中的每一个都位于不同的标头中。如何以不会收到标识符错误的方式包含标头

客户.h

#ifndef CLIENT_H
#define CLIENT_H
#include "Viewable.h"
  class Client{
     Viewable *viewptr;
}
#endif

可视.h

#ifndef VIEWABLE_H
#define VIEWABLE_H
#include "Client.h"
  class Client{
     Client* client;
}
#endif

这段代码给了我标识符错误,因为有双重定义。我明白为什么,我怎样才能避免这个错误?

创建一个包含两个类的新头文件:

#ifndef BOTH_H
#define BOTH_H
    class Client;
    class Viewable;
#endif

而不是在每个标头中包含 both.h。

如何包含已经包含我当前标题的其他标题

你不能。没有办法做到这一点。它将创建包含的无限递归(如果使用标头保护,这将提前终止(。

如何避免该错误?

您将需要更改程序,以便没有循环依赖关系,并且可以删除其中一个包含项。

实际上,

在示例程序的情况下,两个类实际上都不依赖于另一个类的定义,因此两者都不需要包含另一个类。将包含内容替换为声明:

class Viewable;
class Client {
    Viewable *viewptr;

class Client;
class Viewable {
    Client* client;
相关文章: