2014-12-11 3 views
0

привет, я хочу, чтобы массив возвращал массив из метода в массив. Мои коды здесь. как можно массировать массив таким образом?Array to Array - несовместимые типы при присваивании 'int *' to 'int error в C++

Сдачу метода:

int* change (int array[], int index1, int index2) { 

    int temp; 

    temp = array[index1]; 
    array[index1] = array[index2]; 
    array[index2] = temp; 

iter++; 

    return array; 
} 

метод Синдикат кода здесь:

static void combine(int mat[], int len) { 

    if(ok) 
    return; 

    int array[len]; 
    *array = *mat; 


    if (len <= sat * sut) { 

     for (int i = len; i < sat * sut - 1; i++) { 

      for (int j = i; j < sat * sut; j++) { 

      // this is error row 
      combine(array, len + 1); 

      array = change(array, i, j); 

       if (isAcceptable(array) == "ACCEPTABLE") { 

        int accepted[sat*sut]; 
        *accepted = *array; 
        ok = true; 
        return; 
       } 



      } 
     } 
    } else 
     return; 
} 

ошибка строка находится здесь:

array = change(array, i, j); 

ошибка: [Ошибка] несовместимые типы в присвоении ' int * 'to' int [(((sizetype) (((ssizetype) len) + -1)) + 1)] '

как я могу это исправить?

+0

в сторону, но вы хотели бы использовать 'зЬй: : swap' в вашей функции 'change'. –

ответ

1
array = change(array, i, j); 

Как говорится в сообщении об ошибке, вы пытаетесь назначить указатель на массив, что не имеет смысла. В этом нет необходимости; просто вызовите функцию для изменения массива:

change(array, i, j); 

и изменить функцию возврата void - нет никакого смысла просто передавая обратно один из аргументов, так как абонент уже знает, что это было. Или не заморачиваться писать функцию на всех:

std::swap(array[i], array[j]); 

Кроме того, это выглядит немного хитроумный:

*array = *mat; 

Возможно, вы думаете, это копирует весь массив в array; это не так, он копирует только первый элемент. Чтобы скопировать массив, сделать

std::copy(mat, mat+len, array); 

или еще лучше, использовать стандартный контейнер, а не нестандартным массив переменной длины:

std::vector<int> array(mat, mat+len);