【问题标题】:Matrix class in c++ assignment operatorC++赋值运算符中的矩阵类
【发布时间】:2016-10-25 13:14:24
【问题描述】:

我正在尝试在 C++ 中实现一个 Matrix 类。我在尝试让赋值运算符工作时遇到问题。在这一点上,我迷路了。问题是我收到一条错误消息,说“向量下标超出范围”。如果我从赋值重载运算符中删除此代码this->size = A.size;,编译器不会抱怨。赋值运算符应该返回对 Matrix 对象的引用。我尝试创建一个新的 Matrix 对象,但这给了我同样的错误。有什么提示吗?

**Matrix.hpp**

class Matrix
{
private:
    int size;           //size of matrix
    double value;
    std::vector<double> M;
public:
...
}

**Header.cpp**

Matrix& Matrix::operator=(const Matrix& A) 
{
    if (this == &A)
    {
        return *this;
    }
    else
    {
        this->size = A.size; // this is causing problems
        return *this;
    }
}

【问题讨论】:

  • 您复制的是大小,而不是值。当您尝试使用伪复制矩阵、访问向量 M 中不存在的索引时,可能会出现索引错误。
  • 您似乎不是 C++ 专家。你为什么做这个?只是为了学习还是有一些需要矩阵数学的应用程序?如果您有一些应用程序,请使用一些可用的库。一个好的图书馆是犰狳arma.sourceforge.net。这比你自己想在这里做的任何事情都更有效率。编写矩阵运算是一项非常棘手的工作。除非您知道自己想要实现什么并且知道自己可以做到,否则不要这样做。
  • 你的代码甚至不起作用,你不能直接调用构造函数。
  • @TheQuantumPhysicist 我不是专家,但我正在努力学习 C++!谢谢:)

标签: c++


【解决方案1】:

将一个矩阵分配给另一个矩阵时,不仅需要更改 size 数据成员,还需要更改其他数据成员,例如调整双精度向量的大小。

【讨论】:

  • 谢谢你,我错过了,我现在已经修好了:)
猜你喜欢
  • 2016-02-16
  • 2021-08-15
  • 2020-10-02
  • 2020-04-03
  • 2019-04-16
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多