【问题标题】:incompatible types in assignment of ‘int’ to ‘int [(((sizetype)(((ssizetype)m) -1)) 1)]’将“int”分配给“int [(((sizetype)(((ssizetype)m) -1)) 1)]”时的类型不兼容
【发布时间】:2013-01-21 16:10:44
【问题描述】:

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

这个错误是什么意思?

【问题讨论】:

  • 您的函数返回一个int,但您将返回值分配给int[]。你想做什么?
  • 无论如何,这是 C,而不是 C++,因为 C++ 不允许动态大小的数组(m 在您的情况下是运行时值)。
  • 如果它被标记为c++,我认为它是标准C之前的非标准C++。
  • @Angew 修正了可怕的语法,修正了更糟糕的格式,重新标记。
  • @H2CO3 你凭什么重新标记?如果他问的是 C++,给他一个 C 的答案对他没有帮助。 (实际上,对于 C 来说,唯一真正的答案是迁移到 C++。在 C 中做这样的事情需要真正的专家;你要么必须就地完成工作,要么必须处理动态分配。)跨度>

标签: c sorting


【解决方案1】:

有几个错误:

  • C++ 不支持可变长度数组 (A1[m]) - 请改用 std::vector
  • 即使这样做了,也无法重新分配数组,因此A1 =... 是非法的
  • 即使他们可以,您也不能为他们分配一个intmergeSort 返回 int(这是为什么呢?)

【讨论】:

  • 从代码中,我认为他想要做的是返回数组。其中,因为数组已损坏,这是不可能的。对于 C 风格的数组,返回类型应该是 int*但是会导致一些其他问题。您的第一行说明了一切:使用std::vector。这样做,将返回类型也声明为向量,他的所有问题都应该解决。
【解决方案2】:

您的问题主要与 C 样式数组有关 坏了,不应该使用。只需更换所有 带有std::vector 的 C 样式数组,您的问题应该 消失。除了返回值,它(从看起来 的东西)也应该是std::vector&lt;int&gt;

【讨论】:

    【解决方案3】:

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

    #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.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多