Ладно...
изначально (ino.h +ino.cpp) имеем
typedef void (*ptrf)(); // указатель на функцию
ptrf xptr[3][8]; // указатель на массив указателей на функцию
помимо основного файла есть еще минимум один файл (test.h +test.cpp), где внутри функции проводится модификация содержимого массива
void test()
{
xptr[1][3]=xfunc; // сама та xfunc может быть и в главном файле проекта и в текущем
}
ну и где-то в третьем файле (test2.h +test2.cpp) встречаем
void test2()
{
xptr[1][3](); // по задаче это применение функции xfunc, только задано позиционными номерами массива,
// а что конкретно там сидит в данный момент определяет test.h +test.cpp
}
дык вот...
Для такой ситуации надо сделать массив видимым во всех файлах (или передавать его параметрами)...
делаю общий для всех файлов проекта файлик dub.h
и включаю в него
typedef void (*ptrf)();
а далее
extern ptrf y_ptrf; // объявляю переменную указатель на функцию
extern ptrf xptr[3][8]; // объявляю двумерный массив
НО... extern ptrf xptr[3][8] это ж вроде не только объявление но и определение для массива?? (хоть и с префиксом extern)...
самое интересное дальше...
в файле ino.h (или в другом заголовочнике комплекта файлов проекта) нужно еще раз указать
ptrf y_ptrf; // объявление переменной указателя на функцию
ptrf xptr[3][8]; // объявление массива
вот тут меня и .... ибо иначе проект не компилируется, а повторное объявление ладно уж указателя...
но для массива?...
Однако ФАКЫТ....
т.е. компилятор считает
extern ptrf y_ptrf; // объявляю переменную указатель на функцию
extern ptrf xptr[3][8]; // объявляю двумерный массив
исключительно объявлениями, которые должны быть позже подкреплены определением данных переменных...
