Проблема в том, что по умолчанию перечисления C ++ не имеют указанного базового типа, хотя по умолчанию обычно используется int
.Таким образом, ваш массив months
не может быть передан в CreateVector
, даже если вы его преобразовали, поскольку они имеют элементы разного размера.
Самым простым решением может быть объявление его как int16_t months[]
, инадеюсь, ваш компилятор должен быть в порядке, преобразуя каждое значение перечисления в качестве инициализатора без приведения.
В качестве альтернативы, скомпилируйте вашу схему с помощью --scoped-enums
, чтобы получить перечисление стиля C ++ 11, которое имеет надлежащий базовый тип.Я предполагаю, что компилятор все еще будет жаловаться на передачу months
в CreateVector
в этом случае, потому что теперь перечисление строго типизировано, но по крайней мере теперь вы можете безопасно приводить его, поскольку значения теперь имеют тот же размер (например, reinterpret_cast<const int16_t *>(months)
).