要定义这两个类定义这两个类“typedef map <C,B :: iterator> A; typedef list <D,A :: iterator> B”?
typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;
类A和B双方互相牵制的迭代器。编译器抱怨上述说法。 如何解决问题?
iammilind说这是不可能的。但是会出现这种逻辑关系,例如优先级队列。所以任何人都有解决方法?
要定义这两个类定义这两个类“typedef map <C,B :: iterator> A; typedef list <D,A :: iterator> B”?
typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;
类A和B双方互相牵制的迭代器。编译器抱怨上述说法。 如何解决问题?
iammilind说这是不可能的。但是会出现这种逻辑关系,例如优先级队列。所以任何人都有解决方法?
不幸的是,它是不可能。
A
和B
是相互依赖的,所以至少其中一个必须被前向声明以支持另一个。
但typedef
类型不能被转发声明为class/struct
。
你不能只使用typedefs来做到这一点。
代B中的类型定义:
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;
然后代以它的类型定义:
typedef map<C, list<D, map<C, list<D, A::iterator>::iterator>::iterator>::iterator> A;
typedef list<D, A::iterator> B;
这种替代会永远持续下去而不会坍塌......
编辑: 我应该指出,如果你围绕地图和列表制作包装类,你可以转发声明这些类。
有时候,我们不幸遇到了这种情况。例如,使用具有增加或减少优先级的函数的优先级队列。 – user1140560 2012-03-07 04:53:26