矩阵类:“没有重载函数push_back的实例与参数列表匹配”

时间:2019-03-23 05:19:08

标签: c++ matrix

因此,我正在创建一个表示任意大小矩阵的类,并且我想编写一个将内部Vector“导出”到二维数组的函数。

我发现some code似乎可以满足我的要求。这是我班上代码的样子:

// Export matrix to array
double** Matrix::a_data() const
{
    vector<double*> ptrs;
    for (auto& vec : mat) 
    {
        ptrs.push_back(vec.data());
    }
    return ptrs.data();
}

其中 mat 是向量>,用于存储矩阵的条目。

相关帖子指出, vec 必须是自动&而不是自动,因为“防止vec成为临时副本非常重要。”

但是,在Visual Studio中,我总是收到错误消息:“没有重载函数push_back的实例与参数列表匹配...参数类型为(const double *)”

所以,我的问题是,如何在不将auto&更改为auto的情况下使它起作用?另外,如何将其扩展到3个维度?

1 个答案:

答案 0 :(得分:1)

您遇到了<?php $s_balance = $_POST('s_balance'); $i_rate = $_POST('i_rate'); $fee = $_POST('fee'); $vat = $_POST('vat'); // perform your insertion and echo result you want ?> 问题。

假设const的类型为mat,则函数中的std::vector<std::vector<double>>的类型为vecstd::vector<double> const&对象的data()成员函数返回const,而不是常规指针。

因此,您需要使用:

const*

但是,然后使用

vector<double const*> ptrs;

将引起更大的问题。 return ptrs.data(); 是函数局部变量。函数返回时将销毁它。因此,返回的指针将是悬空指针。

克服该问题的选项。

  1. 将返回类型更改为ptrs
  2. 创建一个std::vector<double const*>的动态数组并返回它。

我强烈推荐第一种选择。