将'int'赋值给'int [((((sizetype)(((ssizetype)m)-1))1)]'的不兼容类型

时间:2013-02-06 12:46:45

标签: c sorting

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

这个错误是什么意思?

3 个答案:

答案 0 :(得分:2)

有几个错误:

  • C ++不支持可变长度数组(A1[m]) - 改为使用std::vector
  • 即使这样做,也无法重新分配数组,因此A1 =...是非法的
  • 即使他们可以,也无法为他们分配一个intmergeSort会返回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.
}