Я хотел бы определить массив строк в другом файле cpp, но, кажется, есть некоторое расхождение между определением и объявлением, когда я пытаюсь сделать указатель (элемент массива) также постоянным. Использование того же определения, что и для декларации, работает нормально, поэтому я подозреваю, что инициализация не является проблемой. В приведенном ниже коде я закомментировал нарушающее const - поэтому он будет компилироваться, но если const не закомментирован, компоновщик (протестированный с g ++ 4.6 и VS10) не найдет ext_string_array.
main.cpp:
#include <iostream>
const char* const string_array[2] =
{
"aaa",
"bbb"
};
extern const char* /*const*/ ext_string_array[2]; // <- offending const
int main()
{
std::cout << string_array[0];
std::cout << ext_string_array[0];
}
definition.cpp:
const char* /*const*/ ext_string_array[2] = // <- offending const
{
"aaa",
"bbb"
};