【问题标题】:C++ many classes referencing each otherC++ 许多类相互引用
【发布时间】:2020-12-26 05:47:57
【问题描述】:

我有一系列类需要像这样互相引用

class A
{
     vector<B *> B_list;
     vector<C *> C_list;
     ... 
};

每个班级。我目前对所有 .cpp 文件使用一个头文件,如下所示:

class B; class C; class A {...}; class B {...}; class C{...};

我想知道是否有办法让每个类有一个标题。

为清楚起见进行编辑:我正在开始一个项目,需要三个非常大、详细且不同的类,每个类都经常相互交互。

我已经为像 class A { C *c_item; B *b_item; } A; 这样的每个类创建了最少的代码,其中包括其他类,并且每个标题都有一个空白的 .cpp 文件。编译它会导致未定义的类型错误,因为没有其他类就无法定义。

所以,我在每个类头中添加了前向声明,例如class C; class B;,这导致“C”没有命名类型错误,在我的原始代码中,当我搞砸时,我得到了一些类已经定义的错误前向声明。

我可以让一切正常工作的唯一方法是使用我上面所说的一个头文件。然后我尝试使用三个单独的标头,它们都包含一个带有前向声明 class A; class B; class C; 的标头,但这并没有解决任何问题。

编辑 2,发现问题:我正在写 class A {...} A;,现在我正在写 class A {...};,每个文件顶部都有前向声明,它正在工作,但我不确定为什么会有这种差异工作。

【问题讨论】:

  • 当您尝试将类定义放在不同的标题中时遇到了哪些问题?
  • 每个类有一个标题是否有意义取决于每个类中的详细信息。您发布的代码中没有任何内容表明每个类不应该有一个标题,因此您需要更详细地描述您面临的问题。

标签: c++ class linker


【解决方案1】:

是的,每个类可以有一个标头,对于 A 类标头,在顶部键入 #include "classB.h",对于 B 类标头,在其中键入 "include "classC.h",然后您应该有3个单独的头文件,你写的代码应该没问题。

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2017-04-11
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多