【发布时间】:2021-09-04 10:08:14
【问题描述】:
我已经编写了这个构造函数来使用initializer_lists初始化我的二维数组。
using namespace std;
class TwoArray{
int** array;
public:
TwoArray(initializer_list<initializer_list<int>> list_){
const size_t row_size = list_.size();
const size_t column_size = list_.begin()->size();
array = new int[row_size][column_size]{};
}
};
但是,这段代码显示了这个错误:
main.cpp: In constructor ‘TwoArray::TwoArray(std::initializer_list<std::initializer_list<int> >)’:
main.cpp:19:48: error: array size in new-expression must be constant
array = new int[row_size][column_size]{};
^
main.cpp:19:48: error: the value of ‘column_size’ is not usable in a constant expression
main.cpp:13:22: note: ‘column_size’ was not initialized with a constant expression
const size_t column_size = list_.begin()->size();
是的,我知道每列的长度可能不同,但为了简单起见,我删除了一些代码。实际上,我正在为 C++ 编写一个数学矩阵数据结构。而且我也知道二维数组可以看成一维的,用一维initializer_list可以很方便的初始化。
如何绕过此错误?为什么会出现这个错误?
【问题讨论】:
-
你认为
new T[n][m]在做什么? -
evg ,我认为
new T[n][m]正在分配一个新的二维顺序数组n*m -
构造函数
TwoArray(initializer_list<initializer_list<int>> list_)是private。
标签: c++ arrays initializer-list