首页 > 解决方案 > main.cpp:30:18:错误:无法将 int (*)[m] 转换为 int (*)[101]

问题描述

#include <bits/stdc++.h>
using namespace std;

int cs(int n, int m, int ar[][101]){
    int dp[n][m];
    dp[0][0] = ar[0][0];
    for(int i = 1; i<m; i++){
        dp[0][i] = ar[0][i]+dp[0][i-1];
    }
    for(int i = 1; i<n; i++){
        dp[i][0] = ar[i][0]+dp[i-1][0];
    }
    
    for(int i = 1; i<n; i++){
        for(int j = 1; j<m; j++){
            dp[i][j] = ar[i][j] + min(dp[i-1][j], dp[i][j-1]);
        }
    }
    return dp[n-1][m-1];
}

int main(){
    int n, m;
    cin>>n>>m;
    int arr[n][m];
    for(int i = 0 ; i < n ;i++){
        for(int j = 0; j<m; j++)
        cin>>arr[i][j];
    }
    cout<<cs(n,m,arr)<<endl;
}

我收到此错误有人可以帮忙吗

main.cpp:30:18:错误:无法将 int ( )[m] 转换为 int ( )[101]

我无法添加知道确切的号码。行和列,所以我不能事先指定它,有没有办法在不使用向量的情况下摆脱这个问题,问题链接是:https ://www.pepcoding.com/resources/online-java-foundation/动态编程和贪婪/最小成本迷宫遍历官方/ojquestion

标签: c++multidimensional-array2ddynamic-programmingdsa

解决方案


每种语言都有其规则。所以,如果你使用 C++,你必须遵循 C++ 的规则。语法必须正确。

如果您使用错误的语法或无效的语言结构,编译器将发出错误消息。

您没有使用 C++。VLA(可变长度数组)不是 C++ 语言的一部分。此外,即使您使用 C++ 语言,您也可能会做错事。

例如,如果一个函数,就像你的情况一样,需要一个类型int ar[][101](这将导致一个衰减的指针),那么你必须在调用函数时传递确切的预期类型。

您正在调用arr[n][m];与类型不同的函数int ar[][101]。这将导致错误消息。

即使我现在忽略这arr[n][m];是无效的 C++ 代码。

您无法以您期望的方式修复它。int**在函数签名中使用一个可以帮助你。

但是代码仍然很糟糕。但这对于“竞争编码”大师来说不是问题。在竞争性编程中,你可以做任何你想做的事情。它与 C++ 几乎没有任何关系。

你也确实不喜欢std::vector,因为竞争编程宗教的追随者将其视为邪恶。但真正的 C++ 程序员会一直使用它。

很难帮你,因为有竞争力的程序员经常甚至不想听。. .


推荐阅读