C++ 定义常量/声明数组

C++ 定义常量/声明数组,c++,C++,我试图声明两个数组,一个是2D,一个是1D。我知道尺寸必须是常量值。因此,常量值是从函数调用的返回值赋值的。这很好,但是当我使用派生值声明数组时,编译错误!为什么 这是我的密码: int populateMatrixFromFile(string fname) { std::ifstream fileIn; int s = determineDimensions(fname); // return value (CONST INT) const int size = s;

我试图声明两个数组,一个是2D,一个是1D。我知道尺寸必须是常量值。因此,常量值是从函数调用的返回值赋值的。这很好,但是当我使用派生值声明数组时,编译错误!为什么

这是我的密码:

int populateMatrixFromFile(string fname) {
std::ifstream fileIn;
int s = determineDimensions(fname);  // return value  (CONST INT)
const int size = s;                  // assign to const

cout << "Value returned from determineDimensions(): " << size << endl;

if (size > 10){
    cout << "Maximum dimensions for array is 10 rows and 10 columns. Exiting" << endl;
    return 1;
}

fileIn.open(fname.c_str(), ios::in); //opened for reading only.

float aMatrix[size][size];  // ERROR
float bMatrix[size];        // ERROR
int populateMatrixFromFile(字符串fname){
std::ifstream fileIn;
int s=determineDimensions(fname);//返回值(CONST int)
const int size=s;//分配给const

cout在任何数组中,第二维度、第三维度等的大小总是恒定的。周期。标准对此非常清楚

如果在堆上以new的数组形式分配变量,则第一个维度(实际上是最后一个索引)可以是变量,如下所示:

int size = 50;
float *p = new float[size];

.... do stuffs

delete[] p;

有些编译器允许在堆栈上使用可变大小的数组,但最好不要使用它。

编译器对数组的恒定大小强制执行此规则,因为它在编译时分配所需的内存。换句话说,计算数组大小所需的所有值必须在编译时已知。在第一个示例中,这是事实并非如此,因此编译器抱怨


如果确实需要动态调整数组大小,则应使用指针和新的[]运算符来分配数组。还需要记住使用delete[]操作员将内存返回到系统并避免任何内存泄漏。

这样我就可以删除第一个dim值?我尝试过,但它不起作用。如果你想要一个矩阵,你不能。你可以自己在矩阵中实现计算索引。在许多情况下,这并不困难。你如何实现它?谢谢。你应该使用
std::vector
@chris当然是另一种选择,只要不存在其他限制,例如不允许std::vector的课堂作业。
int size = 50;
float *p = new float[size];

.... do stuffs

delete[] p;