给定一个自定义类X
,其中包含另一个自定义类Y
的实例向量,我想从一个实例中访问类X
的公共变量Y
使用例如指向X
实例的全局引用或指针。最终,类Z
包含类X
的实例(现在,一次只能有一个X
实例,暗示使用单例)。
当然,这是实际问题的简化(有点抽象)版本,它包含更多具有某些依赖性的类(包括循环的)。现在,在有人开始“...不使用全局变量或指针,不要使用循环依赖,...” - 我知道,请假设我有充分的理由在这种情况下使用它们。一般来说,我也想避免它们。
最初的想法是让myX
(在课程Z
中定义)全局可用,但我不确定如何正确地做到这一点。如果我在myX
内使用Y
(例如使用extern
),则Y
必须了解类X
。但是我不能在这里包含X
的标题。我可以使用X
的前向声明,但Y
仍然不知道myObjectsY
。显然,这不起作用。
X级
#include 'Y.h'
class X {
public:
vector<Y> myObjectsY;
};
Y类
class Y {
// How to obtain e.g. the number of objects Y in the myObjectsY vector
};
Z级
#include 'X.h'
class Z {
X *myX = new X();
};
答案 0 :(得分:1)
只需在Yh中向前声明X并给Y指向X.如果在Y.cpp中包含Xh,则可以在Y.cpp中定义的函数中访问X的成员(因为X的定义在那一点)。