将’int’赋值给’int ‘的不兼容类型
以下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[nm]; // 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; }
这个错误是什么意思?
有几个错误:
- C ++不支持可变长度数组(
A1[m]
) – 改为使用std::vector
。 - 即使它确实如此,也不能重新分配数组,因此
A1 =...
是非法的 - 即使他们可以,你也不能为他们分配一个
int
。mergeSort
返回一个int
(为什么会这样?)
您的问题主要与C样式数组被破坏的事实有关,不应该使用。 只需用std::vector
替换所有C样式数组,你的问题就会消失。 除了返回值,(从事物的外观)也应该是std::vector
。
Barebones程序产生上述错误:
#include 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分配给int数组。 你必须首先取消引用它:
#include 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. }