C++中类的前定义

C++中类的前定义,c++,class,pointers,C++,Class,Pointers,可能重复: 我有两个文件,一个在这里定义结构:端口,另一个在这里定义类:设备。由于类使用这些结构作为端口,因此它们反过来需要链接到类,最好是通过指针。但是,如果尚未定义设备类,如何创建此指针 这大概就是我想要的代码的样子 B.h: typedef struct aPort { std::string portName; Device *ptrDeviceThatOwnsPort; } port; 装置h: #include "backbone.h" class Device

可能重复:

我有两个文件,一个在这里定义结构:端口,另一个在这里定义类:设备。由于类使用这些结构作为端口,因此它们反过来需要链接到类,最好是通过指针。但是,如果尚未定义设备类,如何创建此指针

这大概就是我想要的代码的样子

B.h:

typedef struct aPort {
    std::string portName;
    Device *ptrDeviceThatOwnsPort;
} port;
装置h:

#include "backbone.h"

class Device {
}
…但这显然会在主干中引发一个错误。h表示设备尚未定义。我试着简单地将设备头文件包含在主干头文件中,放在typedef前面,但没有成功,因为每个头都依赖于另一个。在我读过的地方,Objuto-C中有一个沿着前面类定义的东西,或者在Obj-C中没有编码相当长时间,所以C++中有类似的东西吗?还是有更好的办法来解决我的问题


欢迎提供任何帮助,并提前表示感谢。

使用转发声明

class Device;

typedef struct aPort {
    std::string portName;
    Device *ptrDeviceThatOwnsPort;
} port;
在主干中。加

class Device;

您只需要添加设备的转发声明。为此,请将主干.h文件修改为以下内容:

class Device;
typedef struct aPort {
    std::string portName;
    Device *ptrDeviceThatOwnsPort;
} port;

这就是它的全部内容。

因为您的结构只有一个指向设备的指针,您可以通过向前声明类来了解它。加上

 class Device;

在其头文件中声明aPort之前。如果您没有使用指针,则需要包含设备的头文件

问题显然是因为当编译器到达该行时

Device *ptrDeviceThatOwnsPort;
它不知道什么是设备。但是,此时不需要包括设备的标题。由于您正在生成一个指针,编译器知道设备是一个类名就足够了。通过添加如下所示的转发声明

class Device;

在前面,您将让编译器知道它,并且它将能够生成该指针

从我读到的其他线程来看,我认为您只需要在主干中的“设备”一词之前添加“class”关键字。这有很多重复项,我只添加了一个可能性。没错。这叫做转发声明,我在发帖两分钟后发现了这个词。对此非常抱歉,但非常感谢您的回答=]抛出错误听起来像是运行时问题,而实际上是编译错误。