Просто добавьте mem-инициализатор для (косвенной) базы виртуальной памяти:
Prius(double b) : Car(b), Toyota(b) {}
Посмотри живи на колиру .
Виртуальное наследование гарантирует, что виртуальная база будет существовать только один раз в полном объекте. Для этого, не может быть задачей некоторой промежуточной базы, которая, возможно, даже не единственная, кто ее запрашивает, инициализировать виртуальную базу: какая из них должна получить разрешение?
Вместо этого ctor делится на две части: одна для инициализации всего, кроме виртуальных баз, будь они прямыми или косвенными, и которая используется производными классами, и одна, сначала инициализирующая виртуальные базы, а затем делегирующая остальную часть первой, которая тот, который призван создать полный объект.
Большинство компиляторов предупреждают, если вы неправильно указали порядок инициализации mem, поэтому позже вы не удивитесь тому, что на самом деле делает ваш код. Вероятно, это была ошибка, указанная вашим компилятором ...