Вы не можете инициализировать член базового класса в списке инициализатора для конструктора в производном классе. Список инициализаторов может содержать базы и члены этого класса, но не члены в базах.
По общему признанию, стандарт для этого не совсем ясен. 12.6.2 / 2 из C ++ 03:
Если только в mem-initializer-id не указан нестатический элемент данных
класс конструктора или прямая или виртуальная база этого класса,
mem-инициализатор плохо сформирован.
Это означает «(нестатический член данных класса конструктора) или (прямая или виртуальная база)». Это не означает «нестатический член данных (класс конструктора или прямая или виртуальная база)». Предложение двусмысленное, но если вы взяли второе чтение, вы вообще не сможете поместить базы в список инициализаторов, а следующее предложение в стандарте проясняет, что вы можете.
Что касается того, почему это не разрешено, это стандартный вопрос обоснования, и я предполагаю мотивы авторов стандарта. Но в основном потому, что ответственность за инициализацию своих собственных членов лежит на базовом классе, а не ответственность производного класса.
Возможно, вам следует добавить int
конструктор к base
.