c++ - 矩阵类 : "No instance of overloaded function push_back matches the argument list"

标签 c++ matrix

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

我找到了 some code这似乎做我想做的。这是代码在我的类(class)中的样子:

// 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 是 vector < vector < double >> 用于存储矩阵的条目。

有问题的帖子指出 vec 需要是 auto& 而不是 auto 因为“防止 vec 成为临时拷贝非常重要”。

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

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

最佳答案

您遇到了 const问题。

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

因此,您需要使用:

vector<double const*> ptrs;

但是,使用

return ptrs.data();

会导致更大的问题。 ptrs是函数局部变量。当函数返回时它将被销毁。因此,返回的指针将是一个悬挂指针。

克服该问题的选项。

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

我强烈推荐第一个选项。

关于c++ - 矩阵类 : "No instance of overloaded function push_back matches the argument list",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310869/

相关文章:

c++ - 当迭代次数增加时,cuSparse 吞吐量下降

r - R 中应用/反转函数的奇怪行为

r - 从由列表组成的列表中提取列

c++ - 在死锁 futex 中调用 malloc 和程序时出现段错误

运行我的随机 ID 生成时出现 C++ 段错误

C++ Vector 比计算几何中的 Vector 修改了两次

c++ - 在 C/C++ 中清除 char 数组的最佳方法是什么?

C++11 枚举类 : plus int failed to compile, 为什么?

python - Numpy 矩阵乘法返回 nan

python - (Python) 对矩阵列的赋值返回全零