* langPtr - это символ «E», а не указатель на этот символ.
Редактировать: К сожалению вопрос изменился, и теперь вы используете langPtr, а не * langPtr. Я посмотрю еще раз.
Хм. Хорошо, извините, я, вероятно, должен предлагать комментарии, а не ответ, но начав ответ, я продолжу его.
Интересно, что ваш код хорошо компилируется на C ++, а не на C, что, вероятно, можно считать индикатором тонкой проблемы.
Сообщение об ошибке компилятора буквально правильно. Идентификатор langPtr является переменной, а не константой, поскольку вы можете изменить langPtr так, чтобы он указывал на другие постоянные символы.
Обходной путь - заменить строковый литерал "English 1" вместо использования langPtr в массиве. Тот же обходной путь, выраженный немного по-другому, заключается в использовании препроцессора для определения langPtr, поэтому;
#define langPtr "English 1"
По общему признанию, это ужасно, но, возможно, это удовлетворит ваши потребности.
Наконец, я бы посоветовал не инициализировать любой массив в заголовочном файле. Объявите переменные в заголовочных файлах. Определить (т.е. инициализировать) переменные в файлах .c.
Удачи.