Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有正向声明所有使用的函数的交叉依赖关系?_C++ - Fatal编程技术网

C++ 没有正向声明所有使用的函数的交叉依赖关系?

C++ 没有正向声明所有使用的函数的交叉依赖关系?,c++,C++,我有A类(在A.h中),这取决于B.h中的B类,反之亦然。前向声明已使用的函数是有效的,但这意味着我必须在将来前向声明这些函数的任何地方进行更新,例如,如果我删除或更改这些函数中的参数,它们必须全部更新以反映更改。我觉得这不是个好习惯。有办法解决这个问题吗 谢谢如果您只需要在声明级别使用指向类的指针或引用,您可以这样做: A.h B.h B.cpp 像这样的相互依赖很难处理,但有时不可避免 如果A和B相互依赖,那么在继续之前,您需要解决一个系统设计问题。如果您只需要在声明级别使用指向类的指针或引

我有A类(在A.h中),这取决于B.h中的B类,反之亦然。前向声明已使用的函数是有效的,但这意味着我必须在将来前向声明这些函数的任何地方进行更新,例如,如果我删除或更改这些函数中的参数,它们必须全部更新以反映更改。我觉得这不是个好习惯。有办法解决这个问题吗


谢谢

如果您只需要在声明级别使用指向类的指针或引用,您可以这样做:

A.h B.h B.cpp 像这样的相互依赖很难处理,但有时不可避免


如果
A
B
相互依赖,那么在继续之前,您需要解决一个系统设计问题。

如果您只需要在声明级别使用指向类的指针或引用,您可以这样做:

A.h B.h B.cpp 像这样的相互依赖很难处理,但有时不可避免


如果
A
B
相互依赖,那么在继续之前,您需要解决一个系统设计问题。

最好的方法是有一个转发声明头:

a、 fwd.h

#pragma once
class A;
a、 h

等等


通过这种方式,每个类都提供了自己的转发声明(位于它所属的报头旁边),通过在报头中包含转发声明报头以及在实现中包含报头来检查与实际声明和定义的一致性。

最好的方法是使用转发声明报头:

a、 fwd.h

#pragma once
class A;
a、 h

等等


这样,每个类都提供了自己的前向声明(位于它所属的头旁边),通过在头文件中包含前向声明头和在实现中包含头来检查与实际声明和定义的一致性。

B不会在头文件中调用它,是吗?我将添加一个
.cpp
文件示例。B不会在头文件中调用它,是吗?我将添加一个
.cpp
文件示例。
#include "B.h"
#include "A.h" // now we get the full declaration of A

B::B(A &a) {
    a.foo(5);
}
#pragma once
class A;
#pragma once
#include "a.fwd.h"
#include "b.fwd.h"
class A
{
    A(B*);
};