Ключ такой:
static int *pieces;
Вы сказали, что положили это в свой заголовок. Это не способ экспорта символа. Любой файл, который содержит заголовок, получит свою собственную статическую версию неинициализированного указателя под названием pieces
.
Вместо этого вы помещаете это в свой заголовок:
extern int *pieces;
extern int init_pieces();
И в исходный файл, вы делаете это:
static const size_t num_pieces = 128;
int *pieces = 0;
int init_pieces()
{
pieces = malloc( num_pieces * sizeof(int) );
return pieces != NULL;
}
Теперь, когда вы включаете заголовок, ваш исходный файл будет знать, чтобы получить pieces
откуда-то еще, и будет ожидать, когда компоновщик будет работать там где. Я также предложил функцию init для массива. Однако я не добавил функцию 'release'.
Обратите внимание, что это все C, а не C ++. Если вы используете C ++, вы действительно должны использовать new
или еще лучше, используйте vector
.
Кроме того, при использовании статики в C ++ помните об этом: Статический порядок инициализации C ++