将’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 =...是非法的
  • 即使他们可以,你也不能为他们分配一个intmergeSort返回一个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. }