【问题标题】:How to pass in 2D array (matrix) into function?如何将二维数组(矩阵)传递给函数?
【发布时间】:2018-08-12 04:33:52
【问题描述】:

这是回归基础,但出于某种原因,Visual Studio 不断给我一个错误。我的函数参数有问题。

我做错了什么?我传入了矩阵的维度 (NxN),但我一定遗漏了一些东西。

这些是它给我的错误,它使我感到困惑而不是澄清:

数组可能没有这种类型的元素(函数参数)

'矩阵'缺少下标(函数参数)

'void print(const int,char [][])':无法将参数 2 从 'char [3][3]' 转换为 'char [][]'(我在 main 中调用函数)

// Function that has problems
void print(const int size, char matrix[][]) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            cout << matrix[i][j];
        }
        cout << endl;
    }

    return;
}

// MAIN
int main() {
    const int n = 3;
    char matrix[n][n] = {'a', 'b', 'c',
                         'h', 'i', 'd', 
                         'g', 'f', 'e'};

    print(n, matrix); // Calling function here

    return 0;
}

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:

    clang 说:#1 with x86-64 gcc (trunk) :2:42: error: 'matrix' 声明为多维数组必须对除第一个以外的所有维度都有边界 - godbolt.org/g/qgnHTy

    请记住,为了进行 array2d[i][j] 查找,它必须能够访问 i * length + j 处的元素,但编译器不知道矩阵的长度是多少,因为你没有'不要把它放在类型中。编译器不知道大小参数是相关的。

    #include <iostream>
    
    using namespace std;
    
    // Function that has problems
    template<int size> 
    void print(char matrix[][size]) {
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                cout << matrix[i][j];
            }
            cout << endl;
        }
    
        return;
    }
    
    // MAIN
    int main() {
        constexpr int n = 3;
        char matrix[n][n] = {'a', 'b', 'c',
                             'h', 'i', 'd', 
                             'g', 'f', 'e'};
    
        print<n>(matrix); // Calling function here
    
        return 0;
    }
    

    直播:https://godbolt.org/g/YWDgk5

    【讨论】:

    • 谢谢!我不太了解模板,所以我需要阅读它。你刚刚做的这个模板是不是叫函数模板?
    • 这个方法可以应用于多个模板参数吗?例如:模板。我可以这样调用函数: print(matrix)?
    • 是的。如果您传入 row=4 和 col=5 的模板参数,模板参数基本上会将函数重写为 void print(const int size, char matrix[4][5]) {,以便类型与您传入的完全匹配
    • 我找到了解决我的问题的方法(通过引用传递数组),但这实际上对我不起作用!如果您看到我的另一篇文章,它并没有让我传递那些模板参数。 :/ 你知道为什么吗?
    • @JessicaWang 我刚刚回答了你的其他问题
    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多