编译器错误:函数调用的常量表达式中必须具有常量值

时间:2018-07-10 00:46:15

标签: c++ c++11 visual-c++

VS在行中给我一个错误:

 int seam[Image_height(img)];

我真的不明白为什么吗?每次运行循环时,我都需要一个新的数组,它的大小由传入的图像的高度定义。我还包括了它正在调用的函数。

int Image_height(const Image* img) {
    return img->height;
}

void horizontal_carve(Image *img, int newWidth) {

    ...

    int offset = Image_width(img) - newWidth;
    for (int i = 0; i < offset; ++i) {
        int seam[Image_height(img)];

        //do stuff with seam...

    }
}

有人可以解释为什么我得到错误

function call must have a constant value in a constant expression 

(特别是突出显示“ Image_height(img)”),我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:0)

C ++不支持可变长度数组,可以使用唯一的ptr

//int seam[Image_height(img)];
std::unique_ptr<int[]> seam(new int[Image_height(img)]); // c++11
auto seam = std::make_unique<int[]>(Image_height(img));  // c++14