2016-09-19 74 views
-2
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++; 
    } 
    } 

} 

它一直給我的錯誤矩陣構造:創建使用initializer_list

Matrix.cpp:30:15: error: cannot convert ‘const 
std::initializer_list<double>’ to ‘double’ in assignment 
mtrx[k][l] = *(list.begin() + cnt); 
     ^

有沒有辦法將其轉換成一張雙人牀?鑄造不起作用。

+0

I_LIST在我的.h文件的typedef initializer_list

要獲得元素,你必須首先獲得在k位置的內部列表,然後在該列表的l位置獲得元素> i_list; – CapnKirk

回答

0

您的代碼段不包含i_list的定義,但它似乎是std::initializer_listinitializer_list s。因此,

*(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]); 

這種迭代的list的物品;對於每一個,它都通過調用std::copy來替換內部循環。

0

基礎上的代碼,我推斷你的i_list是一個嵌套initializer_list這樣的:

std::initializer_list<std::initializer_list<double>> 

這意味着當你調用*(list.begin() + cnt)(這是寫list.begin()[cnt]的另一種方式),你沒有得到double元素,但位置在cnt的內部列表。

mtrx[k][l] = list.begin()[k].begin()[l]; 
+0

我試過了,它給了我:Matrix.cpp:30:32:錯誤:'operator []'不匹配(操作數類型是'const std :: initializer_list '和'int') mtrx [k] [l] = list.begin()[k] [l]; – CapnKirk

+0

@CapnKirk固定。忘了'.begin()' – Rufflewind