为什么我的拷贝构造函数有“未定义的引用”错误?

时间:2017-10-13 15:49:17

标签: c++ initializer-list constructor-overloading

我以为我已经为我的initializer-list constructor正确设置了一切,但显然,还有一些关于它的事情。它应该是我的overloaded constructor Matrix class从这种类型的输入中创建MatrixMatrix d = {{1,3}, {5,9};我知道我的一个定义不正确,但我可以' t解读哪一个。

Matrix::Matrix(const i_list & list){
  uint rows = list.size();
  uint cols = list.begin()->size();
  int i = 0;
  mat = new double*[rows];
  for(uint m = 0; m < rows; m++){
    mat[m] = new double[rows];
  }
  for(uint n = 0; n < rows; k++){
    for(uint w = 0; w < cols; w++){
      mat[n][w] = *(list.begin()[n].begin[w] + i);
      i++;
    }
  }

1 个答案:

答案 0 :(得分:2)

mat[n][w] = *(list.begin()[n].begin[w] + i);基本上是无稽之谈。您可以循环输入,这意味着您不需要单独的循环。

Matrix::Matrix(const i_list & list){
  mat = new double*[list.size()];
  for(auto r = list.begin(); r != list.end(); ++r){
    auto row = mat[r - list.begin()] = new double[r->size()];
    for(auto c = r->begin(); c != r->end(); ++c){
      row[c - r->begin()] = *c;
    }
  }
}

应该做的是将mat**double更改为std::vector<std::vector<double>>,此时它会变为:

Matrix::Matrix(const i_list & list) : mat(list) {}