使用数组大小变量的编译器标记错误

问题描述 投票:0回答:1

这段简单的代码由于某种原因导致编译器显示错误:

#include <iostream>
using namespace std;
int main() {
size_t c_string_length{15}; 
auto* selection{new char[c_string_length]{"Biggie Smalls"}};
for(size_t i{};i<c_string_length;i++)
    cout<<selection[i];
    
delete [] selection;

return 0;
}

我得到的错误是这样的:

    error: invalid use of array with unspecified bounds 
    14 | char* selection{new char[c_string_length]{"Biggie Smalls"}};
       |                                                          ^

但是一旦我更换尺寸(由变量给出 c_string_length ) 动态分配的数组的整数 - 比如 15,程序运行得很好并显示预期的输出。
这是为什么?它与使用的数组大小变量的数据类型无关,我使用int进行了检查。

c++ arrays c++11 dynamic-memory-allocation
1个回答
0
投票

我弄清楚了错误背后的原因。这是因为,对于编译器来说,它有点令人困惑——数组的大小,它应该是常量大小。当简单地使用变量 c_string_length 时,我们暗示大小不是固定的并且可能会发生变化。 解决方法是告诉编译器 c_string_length 是一个常量;通过:

const size_t c_string_length{15};

就是这样,现在编译器确定 c_string_length 是一个常量,可以毫无混淆地使用它。

© www.soinside.com 2019 - 2024. All rights reserved.