C++函数不返回 2D 数组

C++ function not returning 2d array

本文关键字:2D 数组 返回 函数 C++      更新时间:2023-10-16

我正在为矩阵算术编写一个Qt应用程序。如果选择了 int,我x1 and y1输入了 2 个 3x3 数组,如果选择了 float,则输入了 x2 and y2 个 3x3 数组。看看主窗口.cpp .

主窗口.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);
    }
}

我正在将这两个数组传递给矩阵类的添加函数,如下所示。

矩阵.h

template <class T>
class matrix
{
public:
    matrix();
    T** subtract(T**&,T**&);
    T** add(T**&,T**&);
    T** multiply(T**&,T**&);
};

矩阵.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**&);
                      ^

不管你以前听过什么,数组都不是指针。二维数组与指向指针的指针关系不大,这是您的编译问题:无法从 2D 数组获取到指针到指针。

如果你的数组是固定大小的,你可以更改函数的签名来要求它(顺便构建一下,这很好,对吧?

?? 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);

我建议您创建一个最小的矩阵类(google,您可以看到许多参考实现)或使用现有库中的矩阵类。