C++ 尽管初始化错误,可变大小的对象可能未初始化

C++ 尽管初始化错误,可变大小的对象可能未初始化,c++,C++,我知道堆上数组的大小必须在编译时(这里是3 x 15000)知道。为什么我仍然会出错 只需使用std::vector即可 int main(){ int sample_rate = 50; int t_max = 60*5 ; int dimensions = 3; int num_samples = sample_rate * t_max; double data[dimensions][num_samples] = { { } }; //Erro

我知道堆上数组的大小必须在编译时(这里是3 x 15000)知道。为什么我仍然会出错

只需使用
std::vector
即可

int main(){
    int sample_rate = 50;

    int t_max = 60*5 ;

    int dimensions = 3;
    int num_samples = sample_rate * t_max;

    double data[dimensions][num_samples] = { { } }; //Error here
    return 0;
}
#包括
int main(){
int抽样率=50;
int t_max=60*5;
内部维度=3;
int num_samples=采样率*t_max;
标准::向量数据(维度,标准::向量(num_样本));
//像这样访问数据
数据[0][0];
返回0;
}
指定数组时,数组的边界(大小)必须是一个常量表达式,如所示。
指定的边界不是常量表达式。要将它们转换为这样的值,您必须在声明这四个整数之前预先添加
const
constexpr
(C++11之后):

#include <vector>

int main(){
    int sample_rate = 50;

    int t_max = 60*5 ;

    int dimensions = 3;
    int num_samples = sample_rate * t_max;

    std::vector<std::vector<double>> data(dimensions, std::vector<double>(num_samples));
    // access data like this
    data[0][0];
    return 0;
}


您应该复制粘贴您执行的确切编译指令和您得到的确切错误,因为对于使用不同编译器或使用不同编译器选项的其他人来说可能不同。将这四个
int
变量标记为
const int
@PeteBecker解决了它,谢谢
我知道堆上数组的大小必须在编译时知道
这个数组在堆栈上。如果你使用的是c++11,你应该选择
constexpr
虽然这个答案非常有用,我会按照你的建议去做,但它不是我问题的答案,所以我不能接受,但请接受我的投票。
const int sample_rate = 50;
constexpr int sample_rate = 50;