2

以下 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;
}

这个错误是什么意思?

4

3 回答 3

2

有几个错误:

  • C++ 不支持可变长度数组 ( A1[m]) - 请改用 a std::vector
  • 即使这样做了,数组也不能重新分配,所以A1 =...是非法的
  • 即使他们可以,你也不能int为他们分配一个。mergeSort返回一个int(为什么?)
于 2013-02-06T12:48:06.283 回答
0

产生上述错误的准系统程序:

#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 分配给 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.
}
于 2013-09-30T18:26:32.417 回答
0

您的问题主要与 C 样式数组已损坏且不应使用的事实有关。只需将所有 C 样式数组替换为std::vector,您的问题就会消失。除了返回值,它(从事物的外观)也应该是std::vector<int>.

于 2013-02-06T12:56:37.823 回答