【发布时间】:2020-10-15 20:54:42
【问题描述】:
我目前正在开发一个基于 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添加到所有文件中的 const 变量中。在哪里声明它们以及在哪里使用它们。 -
@EmmanuelMathi-Amorim 我不确定仅此一项是否可行。编译器抱怨,因为它没有 A、B、C 的值,其中数组被声明为
extern。 -
@Anonymous1847 我明白你的意思。 OP 可能应该将 const 变量切换为宏定义,或者如果它们有 C++ constexpr 可用,那么这是最好的。
标签: arrays arduino global arduino-c++