C++:两个类如何在不重新声明且没有 header 相互调用的情况下相互调用

标签 c++ oop header-files

我对此有点疑问。我有一个类 A,它实例化 B 的一个对象,然后 B 实例化一个 A 的对象。这有可能吗?我试着在每个标题中添加这个

#ifndef A
#define A
  class a...
#endif

但是如果让我处于无限标题循环中,它达到最大标题包括,那么显然一个正在调用另一个,另一个正在调用那个。有什么办法可以实现吗?

编辑:好的,这似乎是一个很好的答案,但现在 A 提示 B 没有构造函数,尽管它确实有一个构造函数。我想不通。

最佳答案

您可以转发声明类,例如:

A.h:

class B;

class A
{
    B* a_;
};

B.h:

class A;

class B
{
    A* a_;
};

在您实际使用这些类的源文件中(即创建它们、销毁它们、使用它们的成员等),您需要包含两个 header 以便它们的定义可用:

#include "A.h"
#include "B.h"

关于C++:两个类如何在不重新声明且没有 header 相互调用的情况下相互调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155990/

相关文章:

c++ - 创建将 .o 存储到目录的 makefile c++

c# - 查找大于 double 值的最小 float

java - 从接口(interface)实现方法但具有不同的参数

javascript - 这是 Node.js 中的正确代码吗? (变量作用域)

oop - SAP Classic Dynpro 和 OO 编程。为什么不?

c - 是否可以根据是否在 C 中定义头文件来添加某些代码部分?

javascript - 用c语言创建登录功能cgi-html。(无PHP,Apache)

c++ - 将二进制字节 (char*) 转换为 uint64_t*,安全吗?

c++ Xcode 预期 '(' 用于函数样式转换或类型构造

c++ - C++ 编译器(或链接器?)如何知道如何处理 cpp 和头文件?