Matrix::Matrix(const i_list & list){
uint rows = list.size();
uint cols = list.begin()->size();
int cnt = 0;
mtrx = new double*[rows];
for(int j = 0; j < cols; j++){
mtrx[j] = new double[cols];
}
for(int k = 0; k < rows; k++){
for(int l = 0; l < cols; l++){
mtrx[k][l] = *(list.begin() + cnt);
cnt++;
}
}
}
它一直给我错误:
Matrix.cpp:30:15: error: cannot convert ‘const
std::initializer_list<double>’ to ‘double’ in assignment
mtrx[k][l] = *(list.begin() + cnt);
^
有没有办法将其转换为双倍?施法不起作用。
答案 0 :(得分:0)
您的代码段不包含i_list
的定义,但它似乎是std::initializer_list
的{{1}}。因此,
initializer_list
是*(list.begin() + cnt);
对象本身(内部对象),而不是initializer_list
。这是你得到的错误信息。
您可能希望将双循环转换为以下内容:
double
这会迭代#include <algorithm>
auto inner = std::begin(list);
for(int k = 0; k < rows; ++k, ++inner)
std::copy(std::begin(*inner), std::end(*inner), &mtrx[k][0]);
的项目;对于每一个,它通过调用std::copy
来替换内部循环。
答案 1 :(得分:0)
根据代码,我推断您的#public_send
是嵌套i_list
,如下所示:
initializer_list
这意味着当您拨打std::initializer_list<std::initializer_list<double>>
(这是另一种撰写*(list.begin() + cnt)
的方式)时,您不会获得list.begin()[cnt]
元素,而是获取位置double
的内部列表。
要获取元素,您必须首先获取位置cnt
的内部列表,然后获取该列表的位置k
的元素:
l