要定义这两个类“typedef map <c,b :: iterator =”“> A; typedef list <d,a :: iterator =”“> B”?</d,> </c,>

时间:2012-03-07 03:33:05

标签: c++ stl

定义这两个类

typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;

A类和B类相互包含彼此的迭代器。 编译器抱怨上述声明。 如何解决问题?

iammilind说这是不可能的。但是这种逻辑关系出现,例如优先级队列。那么任何人都有解决方法吗?

2 个答案:

答案 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)

不幸的是,不可能 AB是相互依存的,因此至少有一个必须向前宣布以支持另一个。
typedef类型无法向前声明为class/struct