Передать переменной значение функции(матрица) c++
У меня есть функция, заполняющая матрицу числами
template <class Type>
Type mass(Type a, Type b){
Type **arr;
arr=new Type*[a];
for (int i=0;i<a;i++) arr[i]=new int[b];
for (int i = 0; i < a; i++){
for (int j = 0; j < b; j++)
cin >> arr[i][j];
}
return **arr;
}
А потом я хочу использовать значение этой функции в другой. Для этого я прописываю
Type arr = mass(a,b);
В таком случае появляется ошибка error: subscripted value is neither array nor pointer
if(arr[i][j] != 0)
Что это такое и как с этим бороться ?
Код целиком:
#include <iostream>
#include <iomanip>
using namespace std;
template <class Type>
Type mass(Type a, Type b){
Type **arr;
arr=new Type*[a];
for (int i=0;i<a;i++) arr[i]=new int[b];
for (int i = 0; i < a; i++){
for (int j = 0; j < b; j++)
cin >> arr[i][j];
}
return **arr;
}
template <class Type>
void index(Type a, Type b){
Type arr = mass(a,b);
int ind=0;
bool ok = false;
for (int i = 0; i < a; i++){
ind++;
for (int j = 0; j < b; j++){
if (arr[i][j]!=0){
ok = true;
break;
}
}
if(ok){
cout<<ind;
break;
}
}
}
template <class Type>
void new_matr(Type a, Type b){
Type arr = mass(a,b);
Type** matr;
matr = new Type*[a];
for (int i=0;i<a;i++) matr[i]=new Type[b];
for (int i = 0; i < a; ++i){
bool ok = false;
for (int j = 0; j < b; ++j){
if(arr[i][j] != 0){
ok = true;
}
}
if(ok){
for (int j = 0; j < b; ++j){
matr[i][j]=arr[i][j];
cout << matr[i][j] << " ";
}
cout << endl;
}
}
cout << endl;
}
int main(){
int n,m;
cin>>n>>m;
new_matr(n, m);
index(n, m);
}
Задача: принять матрицу размера m*n, удалить из неё все столбцы и строки заполненные нулями. Использовать шаблоны чтобы программа работала для типов int, float, double