C ++ 2D Array - 对于数组下标,出错无效类型'int [int]'

时间:2015-08-25 12:23:14

标签: c++ arrays

我正在尝试使用C ++中的2D数组创建MxN矩阵。

createMatrix()函数请求矩阵项的用户输入,printMatrix()函数必须打印矩阵。

但打印任务无效(我无法访问创建的阵列,我不明白为什么)

我收到错误:

matrix.cpp:35:20: error: invalid types ‘int[int]’ for array subscript
    cout << matrix[i][j];

我正在使用的代码是:

#include "iostream"
using namespace std;

// user input matrix
int createMatrix(int m, int n){
    int arr[m][n];
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << "A[" << i << "][" << j << "] : ";
            cin >> arr[i][j];
        }
        cout << endl;
    }
    return arr[m][n];
}

/*
void printMatrix(int matrix[][2], int m, int n){
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << matrix[i][j];
        }
    }
}
*/

int main(){ 
    int m = 2, n = 2; // m = rows, n = columns
    int matrix = createMatrix(m,n);

    //  printMatrix(matrix, m, n); // not working as sub-routine too, main target to make it work with sub-routine

    // to print matrix
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << matrix[i][j];
        }
    }

    return 0;
}

3 个答案:

答案 0 :(得分:5)

matrixint而不是int[][]。由于它是int,因此没有下标运算符,这就是为什么你得到的错误。您还使用了不是标准C ++的可验证长度数组。我建议您更改代码以使用std::vector之类的

std::vector<std::vector<int>> createMatrix(int m, int n)
{
    std::vector<std::vector<int>> arr(m, std::vector<int>(n));
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << "A[" << i << "][" << j << "] : ";
            cin >> arr[i][j];
        }
        cout << endl;
    }
    return arr;
}

然后main()将是:

int main(){ 
    int m = 2, n = 2; // m = rows, n = columns
    std::vector<std::vector<int>> matrix = createMatrix(m,n);

    //  printMatrix(matrix, m, n); // not working as sub-routine too, main target to make it work with sub-routine

    // to print matrix
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << matrix[i][j];
        }
    }

    return 0;
}

答案 1 :(得分:0)

您的矩阵不是数组。它是 int

您需要使用指针。

答案 2 :(得分:0)

是的,createMatrix有效,但您无法对其创建的内容采取任何措施。这是因为:

  1. arr[n][m]是本地的(顺便说一句,超出界限)。它不是你想象的矩阵,而是位置[n] [m]的arr项目。
  2. 没有很好地定义固定大小的数组,其大小取决于函数输入。
  3. 您需要从createMatrix作为指针传递main()数组(就像您在printMatrix中所做的那样),createMatrix应该使用它,而不是本地的。{ / p>

    现在关于你原来的问题:

      

    但打印任务不起作用(我无法访问阵列   创建,我不明白为什么)

    matrix定义为int,而不是数组。

      

    int matrix = createMatrix(m,n);