我想用全局变量声明数组的长度。但我得到了错误,我很困惑解决这个问题。
int BARIS = 8;
//I get error when declare Squares Array with global variable (BARIS variable)
int SquaresInfo[BARIS];
int main(int argc, const char * argv[]) {
cout << "\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t Tekan ENTER untuk masuk ke permainan";
if(cin.get() == '\n' ) {
system("clear");
cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
gameInterface();
} else {
cout << " ";
}
return 0;
}
声明SquareInfo数组的长度时出错。我很困惑如何使用全局变量声明数组长度
答案 0 :(得分:2)
数组的大小应为常量表达式(大于0)。更改此声明
int BARIS = 8;
到
const int BARIS = 8;
C ++标准不允许使用可变长度数组(VLA),尽管某些编译器有自己的语言扩展允许使用VLA。而且VLA(s)应具有自动存储持续时间。也就是说,如果你被允许定义一个VLA,那么它应该是一个本地数组
允许VLA的C标准(6.7.6.2数组声明符)
- ...如果标识符被声明为具有静态或线程存储持续时间的对象,它不应具有可变长度数组 型即可。
醇>
如果变量可能不是常数,则使用std::vector<int>
而不是数组。例如
#include <vector>
//...
int BARIS = 8;
std::vector<int> SquaresInfo( BARIS );
答案 1 :(得分:2)
除了其他答案可能指出c风格数组定义的解决方案(你需要一个constexpr
可用于在编译时指定数组大小),我想鼓励使用{{ 3}}由现行标准提出:
std::array<int,8> SquaresInfo;
可以使用其他地方的std::array<>
函数获取当前大小。
访问某些索引将被边界检查,并且它提供了更多类型的行为(例如,自动复制沿赋值操作),而不是c风格的数组。
答案 2 :(得分:0)
只需在主函数中移动数组定义和/或声明BARIS const
答案 3 :(得分:0)
您不能拥有变量数组索引,请尝试
#define BARIS 8
int squareInfo[BARIS];