代码之家  ›  专栏  ›  技术社区  ›  Silverspur

“X是Y的模糊基”:多重继承噩梦

  •  -2
  • Silverspur  · 技术社区  · 7 年前

    下面是我的类层次结构。

    全部的 Ixxxx 接口

    所有箭头表示继承。

    class hierarchy

    在使用这些类的代码中的某个地方,我必须传递一个 Track* 其中 IConnectableTrack*

    error: ‘IConnectableTrack’ is an ambiguous base of ‘Track’
    

    我知道这是一个多重继承的问题,但我尝试了 virtual

    特别是,我想 红色接口之间的继承和绿色类之间的继承(即所有紫色箭头)就足够了,但这并不能解决问题。

    这里正确的构造是什么?

    :这个问题与前面提到的不同,因为它包括纯抽象类,与引用的特定错误消息有关。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Andriy Tylychko    7 年前

    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);
    }