我有两个文件,一个定义结构(此处为:ports),另一个定义类(此处为:device)。由于类使用这些结构作为端口,因此它们需要链接到类,最好是通过指针。但是,如果尚未定义设备类,如何创建此指针?
这大致是我希望代码看起来像......
backbone.h:
typedef struct aPort {
std::string portName;
Device *ptrDeviceThatOwnsPort;
} port;
device.h中:
#include "backbone.h"
class Device {
}
...但是这显然会在backbone.h中引发错误,说 Device尚未定义。我尝试简单地将设备头部包含在主干头文件中,在typedef前面,但是这不起作用,因为每个头部都依赖于另一个头部。在某个地方我已经读过,在Objectve-C中有一些东西沿着“前面的类定义”左右(没有在Obj-C中编码很长一段时间),所以在C ++中有类似的东西吗?或者我的问题有更好的解决方案吗?
非常欢迎任何帮助,并提前致谢。
答案 0 :(得分:6)
使用前向声明。
class Device;
typedef struct aPort {
std::string portName;
Device *ptrDeviceThatOwnsPort;
} port;
答案 1 :(得分:2)
您只需添加设备的前向声明即可。为此,请将“backbone.h”文件修改为以下内容:
class Device;
typedef struct aPort {
std::string portName;
Device *ptrDeviceThatOwnsPort;
} port;
这就是它的全部内容。
答案 2 :(得分:2)
由于你的struct只有一个指向Device
的指针,你可以通过向前声明该类来了解它。只需添加
class Device;
在您的头文件中声明aPort
之前。如果您没有使用指针,则需要包含Device
答案 3 :(得分:1)
在backbone.h中。添加
class Device;
答案 4 :(得分:1)
问题显然是因为当编译器到达行
时Device *ptrDeviceThatOwnsPort;
它不知道Device
是什么。但是,此时您不需要包含Device
的标头。由于您正在创建指针,因此编译器知道Device
是类名是足够的。通过添加类似
class Device;
在前面,您将让编译器知道它,并且它将能够生成该指针。