【发布时间】: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++