Доброго времени суток!
Допустим, есть такая иерархия:
struct Base
{
Base(int){}
};
struct Der:virtual Base
{
Der(int):Base(0){}
};
struct Derived:Der, Base
{
//Derived(int):Base(0),Der(0),Base(1){}
};
Как здесь инициализировать базовые классы в конструкторе Derived? Ведь по сути тут нужно инициализировать 2 класса Base — виртуальный, который в части Der, и прямой базовый, и возникает что-то вроде неоднозначности. Пишет "error: ‘struct Base’ is both a direct base and an indirect virtual base" (Base является как прямым базовым классом, так и косвенным виртуальным базовым классом), но насколько я знаю, по стандарту такое возможно. И действительно, если конструктор Base сделать по умолчанию, ошибок никаких не выдает, т.к. в таком случае явный вызов конструктора Base можно не писать. Но как быть, если конструктор принимает один или несколько параметров?