C++函数不返回 2D 数组
C++ function not returning 2d array
我正在为矩阵算术编写一个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,您可以看到许多参考实现)或使用现有库中的矩阵类。
相关文章:
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 使用指针算法修改函数中的 2D 数组
- 在C++中初始化和打印 2D 数组
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- C++ 2D 数组写入多个位置
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 如何从initializer_list初始化 2D 数组
- 交换函数不是在 C++ 中交换 2D 数组的元素