定义这两个类
typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;
A类和B类相互包含彼此的迭代器。 编译器抱怨上述声明。 如何解决问题?
iammilind说这是不可能的。但是这种逻辑关系出现,例如优先级队列。那么任何人都有解决方法吗?答案 0 :(得分:2)
你不能只使用typedef。
用B代替typedef:
typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;
变为:
typedef map<C, list<D, A::iterator>::iterator> A;
typedef list<D, A::iterator> B;
然后用A替换它的typedef:
typedef map<C, list<D, map<C, list<D, A::iterator>::iterator>::iterator>::iterator> A;
typedef list<D, A::iterator> B;
这种替换将永远不会崩溃......
编辑: 我应该指出,如果你围绕地图和列表创建包装类,你可以转发声明类。
答案 1 :(得分:1)
不幸的是,不可能
A
和B
是相互依存的,因此至少有一个必须向前宣布以支持另一个。
但typedef
类型无法向前声明为class/struct
。