Bar
не является производным от Foo
, у него есть член с именем x
типа Foo
, поэтому x
должен появиться в mem-initializer-list .
Bar : x(y) {}
Однако для того, чтобы это было действительным, объявление y
должно появляться перед объявлением x
в определении class Bar
, поскольку порядок инициализации членов класса всегда происходит в том порядке, в котором объявления членов появляются в определении класса, и, если вы инициализируете x
из y
, вы захотите инициализировать y
до x
.
Также обратите внимание, что после определения class baz
.
вам не хватает точки с запятой.