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

时间:2017-04-06 07:25:59

标签: c++ header

我有一个关于包含标题的快速问题 我想要构建两个类,它们都拥有指向另一个类的指针。 它们中的每一个都在不同的标题中。 如何以我不会收到标识符错误的方式包含标题

Client.h

#ifndef VIEWABLE_H
#define VIEWABLE_H
#include "Client.h"

  class Client{
     Client* client;
}
#endif

Viewable.h

{{1}}

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

2 个答案:

答案 0 :(得分:0)

使用其中的两个类创建一个新的头文件:

#ifndef BOTH_H
#define BOTH_H

    class Client;
    class Viewable;

#endif

将every.h包含在每个标题中。

答案 1 :(得分:0)

  

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

你做不到。没有办法实现这一目标。它会创建一个无限递归的包含(如果你使用标题保护会过早终止)。

  

我该如何避免这个错误?

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

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

class Viewable;
class Client {
    Viewable *viewptr;

...

class Client;
class Viewable {
    Client* client;