||=== Build file: "no target" in "no project" (compiler: unknown) ===| D:\codeT\1429.cpp||In function 'int main()':| D:\codeT\1429.cpp|39|error: cannot convert 'long long int (*)[3]' to 'long long int**'| D:\codeT\1429.cpp|7|note: initializing argument 4 of 'long long int max_remaining_money(int, long long int, int, long long int**)'| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
时间: 2023-06-27 14:05:49 浏览: 246
这个编译错误的原因是在调用函数 `max_remaining_money()` 时,第四个参数的类型应该是 `long long int **`,但是你传递的是一个二维数组的指针 `long long int (*)[3]`,所以编译器报错了。你可以将二维数组的指针转换为指向指针数组的指针,这样就可以解决这个问题了。具体实现方法可以参考下面的代码示例:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
// 计算最大剩余金额
long long int max_remaining_money(int N, long long int K, int M, long long int** A) {
long long int ans = 0;
for (int i = 0; i < N; i++) {
long long int sum = 0;
for (int j = 1; j <= A[i][0]; j++) {
sum += A[i][j];
}
if (sum < K) {
ans += A[i][A[i][0]];
} else {
int idx = upper_bound(A[i] + 1, A[i] + A[i][0] + 1, K) - A[i];
ans += A[i][idx - 1];
}
}
return ans;
}
int main() {
int N, M;
long long int K;
cin >> N >> K >> M;
// 动态分配二维数组
long long int **A = new long long int*[N];
for (int i = 0; i < N; i++) {
int len;
cin >> len;
A[i] = new long long int[len + 1];
A[i][0] = len;
for (int j = 1; j <= len; j++) {
cin >> A[i][j];
}
sort(A[i] + 1, A[i] + len + 1);
}
// 调用函数计算最大剩余金额
long long int ans = max_remaining_money(N, K, M, A);
cout << ans << endl;
// 释放内存
for (int i = 0; i < N; i++) {
delete[] A[i];
}
delete[] A;
return 0;
}
```
注意,在释放动态分配的二维数组内存时,需要对每一行使用 `delete[]` 进行释放,最后再使用 `delete[]` 释放整个数组的内存。
阅读全文