我正在尝试用C ++编写代码(使用模板)来添加2个矩阵。
我在.h文件中有以下代码。
#ifndef __MATRIX_H__
#define __MATRIX_H__
//***************************
// matrix
//***************************
template <class T, int rows, int cols> class matrix {
public:
T mat[rows][cols];
matrix();
matrix(T _mat[rows][cols]);
matrix operator+(const matrix& b);
};
template <class T, int rows, int cols> matrix <T,rows,cols> :: matrix (T _mat[rows][cols]){
for (int i=0; i<rows; i++){
for (int j=0; j<cols; j++){
mat[i][j] = _mat[i][j];
}
}
}
template <class T, int rows, int cols> matrix <T,rows,cols> :: matrix (){
for (int i=0; i<rows; i++){
for (int j=0; j<cols; j++){
mat[i][j] = 0;
}
}
}
template <class T, int rows, int cols> matrix <T,rows,cols> matrix <T,rows,cols>::operator+(const matrix<T, rows, cols>& b){
matrix<T, rows, cols> tmp;
for (int i=0; i<rows; i++){
for (int j=0; j<cols; j++){
tmp[i][j] = this->mat[i][j] + b.mat[i][j];
}
}
return tmp;
}
#endif
我的.cpp:
#include "tar5_matrix.h"
int main(){
int mat1[2][2] = {1,2,3,4};
int mat2[2][2] = {5,6,7,8};
matrix<int, 2, 2> C;
matrix<int, 2, 2> A = mat1;
matrix<int, 2, 2> B = mat2;
C = A+B;
return 0;
}
编译时,我收到以下错误:
1以及c:\用户\卡琳\桌面\利奥尔\研究\ CPP \ cpp_project \ cpp_project \ tar5_matrix.h(36): 错误C2676:二进制'[':'矩阵'没有定义这个 运算符或转换为预定义可接受的类型 操作
请告知
答案 0 :(得分:5)
该行:
tmp[i][j] = this->mat[i][j] + b.mat[i][j];
应该是:
tmp.mat[i][j] = this->mat[i][j] + b.mat[i][j];
您正尝试直接索引tmp
变量,其类型为matrix<T, rows, cols>
。因此,它抱怨matrix
类没有提供operator[]
的实现。
答案 1 :(得分:1)
由于tmp
的类型为matrix<T, rows, cols>
,因此如下:
tmp[i][j] = ...
使用您尚未定义的matrix::operator[]
。你可能想说
tmp.mat[i][j] = ...