2012-03-07 61 views

回答

1

不幸的是,它是不可能
AB是相互依赖的,所以至少其中一个必须被前向声明以支持另一个。
typedef类型不能被转发声明为class/struct

+0

有时候,我们不幸遇到了这种情况。例如,使用具有增加或减少优先级的函数的优先级队列。 – user1140560 2012-03-07 04:53:26

2

你不能只使用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; 

这种替代会永远持续下去而不会坍塌......

编辑: 我应该指出,如果你围绕地图和列表制作包装类,你可以转发声明这些类。

+0

你自己不确定它是否有效。你有没有试过编译它?这个答案是不实际的,它不起作用。 – iammilind 2012-03-07 04:04:49

+1

@iammilind我只是回答这个问题。我知道前向声明是必要的,但我不认为typedef可以被前向声明。 – datdo 2012-03-07 04:31:33

相关问题