我正在编写一个用于矩阵运算的Qt应用程序。如果选择了x1 and y1
,我会在int
中输入2个3x3数组;如果选择了x2 and y2
,我会在float
中输入。看看MainWindow.cpp。
MainWindow.cpp
int x1[3][3],y1[3][3];
float x2[3][3],y2[3][3];
matrix<int> m1 ;
matrix<float> m2 ;
void MainWindow::addcheck(){
typecheck();
if(ui->intradio->isChecked()){
int** add1 = m1.add(x1,y1);
putresult1(add1);
}
else if(ui->floatradio->isChecked()){
int** add2 = m2.add(x2,y2);
putresult2(add2);
}
}
我在矩阵类的add函数中传递这两个数组,如下所示。
matrix.h
template <class T>
class matrix
{
public:
matrix();
T** subtract(T**&,T**&);
T** add(T**&,T**&);
T** multiply(T**&,T**&);
};
matrix.cpp
template <class T>
T** matrix<T>::add(T**& a, T**& b) {
T c[3][3] ;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
c[i][j] = a[i][j] + b[i][j] ;
}
}
return c ;
}
但是,我在将2d数组返回**时收到以下错误。我无法解密错误。 错误:
/Users/sarthakmunshi/prac/mainwindow.cpp:74: error: non-const lvalue reference to type 'int **' cannot bind to a value of unrelated type 'int [3][3]'
add1 = m1.add(x1,y1);
^~
/Users/sarthakmunshi/prac/matrix.h:10: passing argument to parameter here
T** add(const T**&,const T**&);
^
答案 0 :(得分:3)
无论您以前听过什么,数组都不是指针。二维数组与指针指针几乎没有关系,这是你的编译问题:没有办法从2D数组转到指针指针。
如果你的数组是固定大小的,你可以改变函数的签名来要求它(顺便提一下 build ,哪个好,对吧?):
?? add(T (&a)[3][3], T (&b)[3][3]);
但你留下了从那里返回的东西......当然答案是Matrix<T>
,对吗?添加两个矩阵会返回一个矩阵,这表示您要查找的函数更像(作为自由函数):
template <typename T>
Matrix<T> add(Matrix<T> const & lhs, Matrix<T> const & rhs);
当然可以拼写:
template <typename T>
Matrix<T> operator+(Matrix<T> const & lhs, Matrix<T> const & rhs);
我建议您创建一个最小矩阵类(谷歌,您可以看到许多参考实现)或您使用现有库中的一个。