我正在实现一个特定类的迭代器,迭代器需要访问A
成员,也A
需要访问iterator
——我希望能够声明A::iterator it;
我知道我可以简单地将一个类嵌套在另一个类中,在这种情况下,我会:
class A {
public:
class iterator {
};
};
但是类A
和iterator
本身都有大量的代码,我想把这些类分成两个不同的文件。
这里的问题是 classA
自然会#include iterator.hpp
,但iterator
也需要 include A
,以便实现正确的迭代器运算符。这就是我坚持的地方:即使添加了包含警卫,我也无法让它发挥作用。
这是我所拥有的一个片段:
a.hpp:
# include iterator.hpp
# ifndef A_HPP
# define A_HPP
template <typename T>
class A {
public:
typedef iterator<T> iterator;
};
迭代器.hpp:
# include a.hpp
# ifndef ITERATOR_HPP
# define ITERATOR_HPP
template <typename T>
class iterator {
public:
// Constructor
iterator(A<T> *a) {
}
};
课程更大,这就是我没有发布整个代码的原因
Obs:如果不可能执行这种递归包含,但我仍然可以设法将类iterator
嵌套在 的命名空间中A
,但在 class 外部声明A
,这就足够了。