【问题标题】:How can I include other header the already include my current header如何包含已经包含我当前标题的其他标题
【发布时间】:2017-04-06 07:25:59
【问题描述】:

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

Client.h

#ifndef CLIENT_H
#define CLIENT_H
#include "Viewable.h"

  class Client{
     Viewable *viewptr;
}
#endif

Viewable.h

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

  class Client{
     Client* client;
}
#endif

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

【问题讨论】:

标签: c++ header


【解决方案1】:

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

#ifndef BOTH_H
#define BOTH_H

    class Client;
    class Viewable;

#endif

比将both.h 包含到您的每个标题中。

【讨论】:

    【解决方案2】:

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

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

    我怎样才能避免这个错误?

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

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

    class Viewable;
    class Client {
        Viewable *viewptr;
    

    ...

    class Client;
    class Viewable {
        Client* client;
    

    【讨论】:

    • 我想补充一点,Client 只能持有一个 pointerViewableViewable 只能持有一个 pointer 到 @ 987654326@。您不能拥有“按值”成员,因为此时编译器不知道其他类的大小,只知道类的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多