如何创建两个不同的类,它们的代码中相互引用
How can I create two different classes that have references to eachother within their code?
如何在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
对象,反之亦然,我猜这不是你想要的(而且显然无论如何都不可能)。
相关文章:
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- Xcode 语义问题引用或以前定义的代码
- 如何编译使用循环引用的代码?
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 我的代码中C++未定义的引用错误?
- 为什么从 constexpr 引用生成的程序集代码与从 constexpr 指针生成的程序集代码不同?
- 为什么此代码片段有效?如何取消引用空点?
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 在没有引用传递资源的情况下,如何在java中简化这些代码
- 使用 Android NDK 使用 clang++ 编译C++代码时对"_Unwind_Resume"的未定义引用
- LLvm Jit:如何从抖动代码中取消引用运行时指针?
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 寻找有关为什么此C++代码在没有引用的情况下不起作用的解释
- 此代码中的右值引用在哪里?
- 对静态库中SDL_mixer函数的未定义引用(代码::块)
- GNU GCC:尝试编译发行版时对"WinMain@16"的未定义引用(代码::Blocks)
- 可移植可执行文件是否可以直接绝对引用代码段中的外部库,而不是通过 IAT
- 链接器错误:对“vtable for square”的未定义引用.代码包括虚拟函数