在C++中提前定义类
Ahead definition of class in C++
可能的重复:
具有前向声明错误的循环依赖
我有两个文件,一个定义结构(此处:端口),另一个定义类(此处:设备)。由于类使用这些结构作为端口,因此它们需要链接到类,最好是通过指针链接。但是,如果尚未定义设备类,我该如何创建此指针?
这大致就是我想要的代码的样子。。。
主干网.h:
typedef struct aPort {
std::string portName;
Device *ptrDeviceThatOwnsPort;
} port;
设备.h:
#include "backbone.h"
class Device {
}
但这显然会在主干网中抛出一个错误。h表示设备尚未定义。我试着简单地将设备标头包含在主干标头文件中的typedef前面,但这并不奏效,因为每个标头都依赖于另一个标头。在我读过的某个地方,Objectve-C中有一些类似于"超前类定义"的东西(已经有很长一段时间没有在Obj-C中编码了),那么C++中有类似的东西吗?或者我的问题还有更好的解决方案吗?
欢迎任何帮助,并提前表示感谢。
使用正向声明。
class Device;
typedef struct aPort {
std::string portName;
Device *ptrDeviceThatOwnsPort;
} port;
您只需要添加Device的前向声明。要做到这一点,请将您的"主干.h"文件修改为以下文件:
class Device;
typedef struct aPort {
std::string portName;
Device *ptrDeviceThatOwnsPort;
} port;
这就是它的全部。
由于您的结构只有一个指向Device
的指针,因此您可以通过正向声明类来了解这一点。只需添加
class Device;
在其头文件中声明aPort
之前。如果您没有使用指针,则需要包含Device
的头文件
在主干网.h中添加
class Device;
问题显然是因为当编译器到达行时
Device *ptrDeviceThatOwnsPort;
它不知道Device
是什么。但是,此时不需要包含Device
的头。由于您正在创建一个指针,编译器知道Device
是一个类名就足够了。通过添加一个看起来像的远期声明
class Device;
在前面,您将让编译器知道它,它将能够生成该指针。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何定义一个纯抽象基类