我有A类(在A.h中),它取决于(B.h)中的B类,反之亦然。前向声明使用的函数有效,但这意味着我必须更新我前面声明这些函数的所有地方,例如,如果我删除,或者更改这些函数中的参数,它们必须全部更新以反映更改。我觉得这不是好习惯。有办法解决这个问题吗?
由于
答案 0 :(得分:4)
如果你只需要在声明级别使用指针或引用到一个类,你就可以这样做:
class B; // forward class declaration
class A {
A(B &);
};
class A;
class B {
B(A &);
};
#include "B.h"
#include "A.h" // now we get the full declaration of A
B::B(A &a) {
a.foo(5);
}
像这样的相互依赖很难处理,但有时候是不可避免的。
如果A
和B
依赖于彼此的实现,那么您需要先解决系统设计问题,然后再继续。
答案 1 :(得分:0)
最好的方法是拥有一个前向声明标题:
a.fwd.h
#pragma once
class A;
A.H
#pragma once
#include "a.fwd.h"
#include "b.fwd.h"
class A
{
A(B*);
};
等
这样,每个类都提供自己的前向声明 - 与它所属的头一起定位 - 通过在头中包含前向声明头和实现中的头来检查与真实声明和定义的一致性。