定义要在包含的头文件中访问的结构体的正确方法

Correct way to define a struct to be accessed in included header files

本文关键字:结构体 访问 方法 文件 包含 定义      更新时间:2023-10-16

我有一些类似的东西:

header1.h

#include "header2.h"
struct MyStruct
{
    int aVariable;
};
class AClass
{
    AnotherClass m_anotherClass;
}

header2.h

class AnotherClass
{
   AnotherClass(MyStruct & myStruct)
      : m_myStruct(myStruct)
   {
   }
   MyStruct & m_myStruct;
};

我想知道当我在header1.h中定义它时,我如何才能访问header2.h中的MyStruct。我知道我可以把结构体的定义移到header2。h中,但这并没有真正意义,因为它的本意是。

我想这样做的唯一原因是因为我希望能够获得存储在header .cpp中更新的变量中的数据。

你需要在header2.h中添加一个forward声明。

// Forward declare MyStruct
struct MyStruct;
class AnotherClass
{
   AnotherClass(MyStruct & myStruct)
      : m_myStruct(myStruct)
   {
   }
   MyStruct & m_myStruct;
};

您可以将结构定义移动到header2.h中,假设您将header1.h包含到header1.cpp中。然后,由于header1.cpp包含了header1.h,而header1.h又包含了header2.h,因此header1.cpp还可以访问header2.h中定义的结构体和类。

可以对MyStruct使用前向声明。由于使用的是引用,因此不需要包含header1.h。如果他们使用结构体,你将无法在这个头文件中定义内联函数,因为你需要它的定义。