以下C代码给出错误:
incompatible types in assignment of ‘int’ to
‘int [(((sizetype)(((ssizetype)m) -1)) 1)]’
在我调用递归函数的行上:
int mergeSort(int arr[], int n)
{
if (n > 1) {
int m = (int)(n / 2);
int A1[m]; // array 1 --> 1 TO M
int A2[n-m]; // array 2 --> M + 1 TO N
int temp = m+1;
for (int i = 0; i < n; i++) {
if (i == m) break;
A1[i] = arr[i];
A2[i] = arr[temp++];
}
A1 = mergeSort(A1, m); //error happens here, assigning an
//integer into an integer array.
A2 = mergeSort(A2, n - m);
arr = merge(A1, A2);
}
return arr;
}
这个错误是什么意思?
答案 0 :(得分:2)
有几个错误:
A1[m]
) - 改为使用std::vector
。A1 =...
是非法的int
。 mergeSort
会返回int
(为什么会这样?)答案 1 :(得分:0)
你的问题主要与C风格数组有关
坏了,不应该使用。只需更换所有的
带std::vector
的C样式数组,你的问题应该是
消失。除了返回值,(从外观上看)
事情)也应该是std::vector<int>
。
答案 2 :(得分:0)
Barebones计划产生上述错误:
#include <iostream>
using namespace std;
int main(){
int (*p)[ 5 ]; //p is "a pointer to an array of 5 ints".
p[0] = 10; //Try to assign the integer 10 to array int[5]? NO!
//You get:
//error: incompatible types in assignment of `int' to `int[5]'
}
您不能将int分配给整数数组。你必须首先取消引用它:
#include <iostream>
using namespace std;
int main(){
int (*p)[ 5 ]; //p is "a pointer to an array of 5 ints".
*p[0] = 10; //assign the integer 10 to position 0 of the
//array where p is pointing.
cout << *p[0]; //prints 10. no error thrown.
}