Es wird aus drei Gründen nicht kompiliert, von denen nichts mit virtueller Vererbung zu tun hat (naja, vielleicht die letzte).
Sie haben die Semikolons nach den Klassendefinitionen vergessen
Ihre Erbschaft ist privat
D::foo()
ist mehrdeutig, wenn nicht explizit überschrieben
Übrigens, die Definition von D selbst ist schlecht formuliert, nicht nur die Tatsache, dass Sie versuchen, es zu benutzen. Ich meine, wenn Ihre main()
-Funktion leer wäre, würde es immer noch nicht kompilieren.
Und "Wird das kompilieren?" hat die offensichtliche Antwort "Warum versuchst du es nicht?"
Zitat aus dem Standard: 10.3.10
%Vor%Das folgende Beispiel zeigt eine Funktion, die nicht eindeutig ist endgültiger Overrider:
Nein, es wird nicht:
%Vor%Dies wird das Diamond-Problem genannt, siehe Ссылка
Tags und Links c++ methods multiple-inheritance virtual