В настоящее время я работаю над аппаратным проектом на основе Atmega2560, и я написал около 2000 строк кода C ++, который теперь становится неуправляемым. Это проект для местного сообщества, и ремонтопригодность важна, поэтому я пытаюсь разложить все по модулям и упростить, чтобы кто-то с еще меньшим пониманием C ++, который у меня был, мог хотя бы понять, что происходит.
В основе проекта лежит глобальный многомерный целочисленный массив, изначально объявленный в main.cpp (где он отлично работал со всеми функциями, содержащимися в main.cpp):
// main.cpp
const int A = 30;
const int B = 20;
const int C = 10;
int gArray[A][B][C];
Если я сделаю то же самое с GLOBAL.h, он будет компилироваться нормально - так что, очевидно, A, B и C принимаются как константы. Но это не работает с модулями. Если в модуле кода я использую:
// setup.cpp
extern const int A;
extern const int B;
extern const int C;
extern int gArray[A][B][C];
Я получаю, что граница массива не является целочисленной константой до ошибки токена ']'.
Итак, мой вопрос в основном - как я могу использовать глобальный многомерный массив в нескольких модулях с фиксированными размерами, установленными в одном месте для удобства обслуживания?
Я пытался кое-что отсортировать, читал и пробовал много идей, которые я читал, но мне не удалось добиться какого-либо прогресса. Тем временем я создал функции для установки и чтения значений массива и поместил их в GLOBALS.h - что кажется неэлегантным, но представляет собой понятный и практичный обходной путь:
const int A=30;
const int B=20;
const int C=10;
int gARRAY[A][B][C];
void setARRAY(int A, int B, int C, int V) {
gARRAY[A][B][C] = V;
}
int getARRAY(int A, int B, int C) {
return gARRAY[A][B][C];
}
extern
к константным переменным во всех файлах. Где вы их декларируете и где используете. - person Emmanuel Mathi-Amorim   schedule 15.10.2020extern
. - person Anonymous1847   schedule 16.10.2020