【问题标题】:main.cpp:30:18: error: cannot convert int (*)[m] to int (*)[101]main.cpp:30:18:错误:无法将 int (*)[m] 转换为 int (*)[101]
【发布时间】:2021-09-23 07:48:33
【问题描述】:
#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/dynamic-programming-and-greedy/min-cost-maze-traversal-official/ojquestion

【问题讨论】:

  • 可变长度数组不是 C++ 标准的一部分,不能以这种方式使用。不更改类型就无法解决它 - std::vector&lt;std::vector&lt;int&gt;&gt; 是最容易使用的,您也可以手动分配内存,但这要困难得多。
  • 为什么“不使用矢量”?您可以使用手动管理的动态数组,但为什么要这样做?
  • 无意冒犯,但初学者在学习非异国情调的替代方案之前先了解异国情调的编译器扩展真的很糟糕。谁让你使用cin&gt;&gt;n&gt;&gt;m; int arr[n][m]; 对你没有帮助

标签: c++ multidimensional-array 2d dynamic-programming dsa


【解决方案1】:

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

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

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多