如何包含已经包含我当前标题的其他标头
How can I include other header the already include my current header
>我有一个关于包含标题的快速问题我的情况是我想构建 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;
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 标题实现取代了其他实现
- 向前删除标题文件中其他名称空间的自定义类型
- 如何包含已经包含我当前标题的其他标头
- 如何防止在标题中包含标头,以最大程度地减少包含在其他 CPP 中
- 预编译标头 - 从所有其他文件中删除所有预编译的标题所必需的
- 为什么在C语言的标题中使用"#"符号?为什么不是任何其他符号?
- 在 Xwindow 中获取其他窗口的标题