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])をサポートしていません-std::vector代わりに使用してください。
  • たとえそうだったとしても、アレイを再割り当てできないため、A1 =...違法です
  • 彼らができたとしても、あなたは彼らにシングルを割り当てることができませんでしintた。mergeSortを返しますint(それはなぜですか?)
于 2013-02-06T12:48:06.283 に答える
0

あなたの問題は主にCスタイルの配列が壊れているという事実に関連しているので、使用すべきではありません。すべてのCスタイルの配列をに置き換えるだけでstd::vector、問題は解消されます。戻り値を除いて、(物事の見た目から)これもである必要がありますstd::vector<int>

于 2013-02-06T12:56:37.823 に答える