c++ - 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++,你必须遵循 C++ 的规则。语法必须正确。
如果您使用错误的语法或无效的语言结构,编译器将发出错误消息。
您没有使用 C++。VLA(可变长度数组)不是 C++ 语言的一部分。此外,即使您使用 C++ 语言,您也可能会做错事。
例如,如果一个函数,就像你的情况一样,需要一个类型int ar[][101]
(这将导致一个衰减的指针),那么你必须在调用函数时传递确切的预期类型。
您正在调用arr[n][m];
与类型不同的函数int ar[][101]
。这将导致错误消息。
即使我现在忽略这arr[n][m];
是无效的 C++ 代码。
您无法以您期望的方式修复它。int**
在函数签名中使用一个可以帮助你。
但是代码仍然很糟糕。但这对于“竞争编码”大师来说不是问题。在竞争性编程中,你可以做任何你想做的事情。它与 C++ 几乎没有任何关系。
你也确实不喜欢std::vector
,因为竞争编程宗教的追随者将其视为邪恶。但真正的 C++ 程序员会一直使用它。
很难帮你,因为有竞争力的程序员经常甚至不想听。. .
推荐阅读
- python - 在嵌套的for循环中将值存储在不同的变量中
- javascript - 访问对象需要setTimeout?
- javascript - 如何从 upbit.com 网站提取数据
- numpy - 由于 numpy 问题,无法从控制台启动 tensorboard
- javascript - 如何从循环中将多个 Json 对象添加到单个数组
- python - 列内的模糊匹配
- c - 接收自己发送的消息的原始套接字
- php - 在 codeigniter 中更改选择不同语言的 url
- wordpress - Wordpress WooCommerce 菜单扩展大搜索按钮删除
- java - 以编程方式在 JpaProperties - Spring 中添加休眠拦截器