此代码编译失败:圆形类型定义
class B;
class A{
typedef int AThing;
typedef B::BThing BThing;
};
class B{
typedef int BThing;
typedef A::Athing AThing;
};
由于A
需要从B
一个typedef
和B
需要一个从A
。
使用具有循环依赖关系的typedefs的典型方法是什么?
此代码编译失败:圆形类型定义
class B;
class A{
typedef int AThing;
typedef B::BThing BThing;
};
class B{
typedef int BThing;
typedef A::Athing AThing;
};
由于A
需要从B
一个typedef
和B
需要一个从A
。
使用具有循环依赖关系的typedefs的典型方法是什么?
具有这种类型的圆形typedef
相关性的典型解决方案是不具有这种类型的圆形typedef
相关性。这些类型的圆形typedef
依赖无法在C++来完成,所以你必须重新安排你的类层次结构:
class B;
typedef int this_is_a_BThing;
class A{
typedef int AThing;
typedef this_is_a_Bthing BThing;
};
class B{
typedef this_is_a_BThing BThing;
typedef A::Athing AThing;
};
这太臭了......哦,很好 – DarthRubik
什么是使用具有循环依赖关系的类型定义的典型方法是什么?
有没有这样的典型的方法,你不能这样做。
有关如何使用前向声明并展开类型范围内的相关typedef的情况,请参阅Resolve header include circular dependencies in C++的答案。
在类范围中引入typedef
的情况与编译器无法通过查看前向声明来解决它无关。
我能想到用类型定义的唯一方法是使用Pimpl Idion,实际上只执行他们介绍。
这不是一个重复.....它是一个单独的问题完全 – DarthRubik
不是重复的IMO,这里没有头文件,更不用说头文件中的循环依赖包括 –
不知道为什么我不能回答,所以会在这里做。这绝对不是重复,而且确实很难!这种情况可以通过添加一个间接级别来解决:[见demo](https://godbolt.org/g/jx5IC9)。我遇到了相同的情况,现在我正在寻找更通用和更有用的解决方案。 – Trollliar
@Trollliar这是一个有趣的方式来解决这个问题.. – DarthRubik