可变大小的物体可能无法尽管初始化初始化错误

时间:2019-01-30 22:42:37

标签: c++

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;
}

据我所知,一个数组对堆大小必须在编译时这是这里(3×15000)是已知的。为什么我仍然收到错误消息?

2 个答案:

答案 0 :(得分:5)

只需使用std::vector

#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;
}

答案 1 :(得分:3)

根据[dcl.array]/1,指定数组的边界(大小)必须为常量表达式。
您指定的边界不是常量表达式。要将它们转换为此类,您必须在声明这四个整数之前,先加constconstexpr(从C ++ 11开始)

const int sample_rate = 50;

constexpr int sample_rate = 50;