Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#917 closed ожидается проверка (задача сдана)

WW #13

Reported by: Kreslavski Kirill Owned by: Артур Гулецкий (huletski)
Component: WW_array Version:
Keywords: Cc:

Description

Я постарался написать всё настолько хорошо, наскольо мог, но там всё равно осталась одна ошибка компиляции. Каким образом она возникает я в душе не чаю, это что-то из разряда мистики, чёрной магии и заговоров. Я два часа безуспешно пытался её пофиксить и так и не понял, из-за чего она возникает.

Change History (1)

comment:1 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Я постарался написать всё настолько хорошо, наскольо мог, но там всё равно осталась одна ошибка компиляции. Каким образом она возникает я в душе не чаю, это что-то из разряда мистики, чёрной магии и заговоров. Я два часа безуспешно пытался её пофиксить и так и не понял, из-за чего она возникает.

o rly? пишут же - преобразование из указателя на конст данные в указатель на неконст данные:

include/my_array.h:100:40: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
  100 |                 return bool(proxy(&data[index / 8], index % 8));
      |                                    ~~~~^
      |                                        |
      |                                        const char*

Ad hoc fix: прикастить явно к char*; нормальный фикс: использовать написанный op[] -- (*this)[index].

Кроме этого, ошибка компиляции в 53 (после исправления ошибки выше): условие выхода из цикла должно быть i < N, например, а не i <= N.

Замечания:

my_array.h

  • зачем явно определять конструкторы, op= в специализации? Почему аргументы передаются не по const ссылкам?
  • 19: по нулевому индексу разве нельзя брать?
  • 52: лучше принимать const T& - не будет избыточной операции копирования/перемещения значения аргумента в параметр;
  • 53: индексация должна быть с нуля;
  • ошибки при чтении/записи элементов my_array<bool, ...>. Например:
    lab_13::my_array<bool, 10> a;
    a[5] = true;
    assert(a[5]);
    const auto &c_ref = a;
    assert(c_ref[5]);
    
  • еще пример:
    lab_13::my_array<bool, 10> a;
    a[0] = true;
    a[1] = a[0];
    assert(a[1]);
    
  • 115: common метод контейнеров;
  • 118: memset + ?: в качестве аргумента = более лаконичный код.

Баллы: 2.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)
Note: See TracTickets for help on using tickets.