【发布时间】:2019-07-29 15:24:57
【问题描述】:
所以我试图在模板类中重载运算符 +。 代码编译并运行,但在使用运算符 + 时崩溃。 尝试了很多东西,我认为这是一个语法问题?任何意见,将不胜感激!
运算符 = 已重载并且可以工作。
矩阵.h
template <int row, int col, class T = int>
class Matrix
{
int rows;
int cols;
T** mat;
public:
Matrix(int defVal = 0) {
rows = row;
cols = col;
memory();
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
mat[i][j] = defVal;
}
~Matrix() {
del();
}
Matrix(const Matrix& other) {
*this = other;
}
const Matrix& operator=(const Matrix& other) {
if (&other != this)
{
rows = other.rows;
cols = other.cols;
del();
memory();
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
mat[i][j] = other.mat[i][j];
}
return *this;
}
friend ostream& operator<<(ostream& os, const Matrix& m) {
for (int i = 0; i < m.cols; i++)
{
for (int j = 0; j < m.rows; j++)
os << m.mat[i][j] << " ";
os << endl;
}
return os;
}
friend Matrix operator+(const Matrix& other, T num) {
Matrix temp = other;
for (int i = 0; i < temp.rows; i++)
for (int j = 0; j < temp.cols; j++)
temp.mat[i][j] += num;
return temp;
}
void memory(){
mat = new T * [rows];
for (int i = 0; i < rows; i++)
mat[i] = new T[cols];
}
void del(){
for (int i = 0; i < rows; i++)
delete[] mat[i];
delete[] mat;
}
};
main.cpp
int main() {
Matrix<4, 4> mat;
std::cout << mat << std::endl;
Matrix<4, 4> identity(1);
std::cout << identity + 3 << std::endl; //crashes here
return 0;
}
如果您需要代码的其他部分,请告诉我!提前致谢!
【问题讨论】:
-
我们需要看看
Matrix是如何实现的。你有复制构造函数吗? -
您的代码无法编译。您错过了
operator<<,这可能是难题的重要组成部分。阅读常见问题解答并提供minimal reproducible example。 -
有人可以解释一下这个语法:
friend Matrix operator+(我第一次看到这样的东西。 -
@deoncagadoes 是友元函数的声明。如果您还没有使用朋友功能,听起来您可以使用good C++ book