如何创建两个不同的类,它们的代码中相互引用

How can I create two different classes that have references to eachother within their code?

本文关键字:引用 代码 创建 何创建 两个      更新时间:2023-10-16

如何在C++中创建两个不同的类,在它们的代码中相互引用?

它看起来像这样;

class A
{
    B b;
}
class B
{
    A a;
}

我在的线路上看到一个错误

B b;

A类内声明;

错误:未在此作用域中声明"B"

请放心,我不会宣布

B b = new B;

在A中,我也没有申报

A a = new A;

在B中,我知道这会导致StackOverflowException。我将使用getter和setter来处理数据。

使用正向声明,并使成员成为指针。使用两个不同的标头是最简单的,尽管可以在一个标头中完成:

// A.h
class B;
class A
{
    B* m_pB;
};

和:

// B.h
class A;
class B
{
    A* m_pA;
};

然后#在每个.cpp文件(A.cpp和B.cpp)中包含两个标头。

这可能就是您想要的:

class B;
class A
{
    B* b;
}
class B
{
    A* a;
}

注意,类B被前向声明为一个类,这样编译器在定义A时就知道它是什么。还要注意,A::b是指向B指针,而B::a是指向A指针[如果您来自Java背景,则可能是指"引用"]。如果A::b被声明为B类型,B::a被声明为A类型,那么每个A对象都将包含一个完整的B对象,反之亦然,我猜这不是你想要的(而且显然无论如何都不可能)。