"X is an ambiguous base of Y":多重继承噩梦
"X is an ambiguous base of Y": Multiple inheritance nightmare
下面是我的 class 层次结构。
所有 Ixxxx
class 都是 接口 (没有成员数据的抽象 class )。
所有箭头代表继承。
颜色只是为了提供更好的视觉效果。
在使用这些 classes 的代码中的某处,我必须传递一个 Track*
,其中需要一个 IConnectableTrack*
,我得到以下编译错误:
error: ‘IConnectableTrack’ is an ambiguous base of ‘Track’
我知道这是多重继承的问题,但是我尝试了virtual
继承的多重组合都无济于事。
特别是,我认为 虚拟化 红色接口之间的继承和绿色 classes(即所有紫色箭头)之间的继承就足够了,但确实如此没有解决问题。
这里的正确结构是什么?
编辑:这个问题与提到的问题不同,因为它包含纯抽象classes,这与引用的特定错误消息有关。
您的 Track
有四个 IConnectableTrack
实例,编译器不知道使用哪一个。将前 3 个箭头虚拟化。
https://wandbox.org/permlink/Y1e9LwDI0IVaERaW
class IConnectableTrack {};
class Object {};
class ConnectableTrack: public virtual IConnectableTrack, public Object {};
class IOccupiableTrack: public virtual IConnectableTrack {};
class OccupiableTrack: public IOccupiableTrack {};
class ISignalledTrack: public virtual IConnectableTrack {};
class SignalledTrack: public ISignalledTrack {};
class Track: public OccupiableTrack, public SignalledTrack {};
void f(IConnectableTrack&) {}
int main() {
Track t;
f(t);
}
下面是我的 class 层次结构。
所有 Ixxxx
class 都是 接口 (没有成员数据的抽象 class )。
所有箭头代表继承。
颜色只是为了提供更好的视觉效果。
在使用这些 classes 的代码中的某处,我必须传递一个 Track*
,其中需要一个 IConnectableTrack*
,我得到以下编译错误:
error: ‘IConnectableTrack’ is an ambiguous base of ‘Track’
我知道这是多重继承的问题,但是我尝试了virtual
继承的多重组合都无济于事。
特别是,我认为 虚拟化 红色接口之间的继承和绿色 classes(即所有紫色箭头)之间的继承就足够了,但确实如此没有解决问题。
这里的正确结构是什么?
编辑:这个问题与提到的问题不同,因为它包含纯抽象classes,这与引用的特定错误消息有关。
您的 Track
有四个 IConnectableTrack
实例,编译器不知道使用哪一个。将前 3 个箭头虚拟化。
https://wandbox.org/permlink/Y1e9LwDI0IVaERaW
class IConnectableTrack {};
class Object {};
class ConnectableTrack: public virtual IConnectableTrack, public Object {};
class IOccupiableTrack: public virtual IConnectableTrack {};
class OccupiableTrack: public IOccupiableTrack {};
class ISignalledTrack: public virtual IConnectableTrack {};
class SignalledTrack: public ISignalledTrack {};
class Track: public OccupiableTrack, public SignalledTrack {};
void f(IConnectableTrack&) {}
int main() {
Track t;
f(t);
}