According to the C++ 20 Standard (9.3.1 Aggregates. p. #3)
(3.1) — If the initializer list is a designated-initializer-list, the
aggregate shall be of class type, the identifier in each designator
shall name a direct non-static data member of the class, and the
explicitly initialized elements of the aggregate are the elements that
are, or contain, those members.
So you may not use the designated initializer list to initialize data members of base classes.
Use instead the usual list initialization like
Employee e1{ "John", "Wick", 40, 50000 };
or
Employee e1{ { "John", "Wick", 40 }, 50000 };
or as @Jarod42 pointed in a comment you can write
Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };
In this case the direct base class is initialized by a designated initializer list while the class Employe in whole is initialised by a non-designated initializer list.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…