【发布时间】:2021-06-05 15:19:46
【问题描述】:
当我在两个不同的地方定义数组(具有相同的行)时,我找不到以下代码无法工作的原因。这是否是好的做法不是我的问题。我只是想找出原因。
// Array Test: t.cpp
// If only the ONE LINE in question is enabled in either place
// it works/fails as indicated. I wonder why?
#include "iostream"
int a = 5; // Rows
int b = 4; // Columns
// int x[a][b]; // if done here: NoGo! WHY? <<<***************************
int main () {
int x[a][b]; // if done here: OK! <<<***************************
for (int r = 0; r < a; r++) {
for (int c = 0; c < b; c++) {
x[r][c] = (r*10+10) + (c+1);
std::cout << x[r][c] << " ";
}
std::cout << "\n";
}
std::cout << "\nARRAY CREATED \n\n";
}
【问题讨论】:
-
数组的大小必须是编译时常量。
a和b都不是编译时常量。该行标有“如果在此处完成:OK!”不是合法的 C++。一些编译器允许它作为扩展。 -
如果将
constexpr添加到两个变量声明中,如果在文件范围内声明数组,它也应该可以工作。 -
@AndreasWenzel --
const就足够了。
标签: c++ arrays global definition