Opened 4 years ago
Closed 4 years ago
#714 closed ожидаются исправления (задача сдана)
HW #2
Reported by: | gabitov.daniil | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | HW #2 (X0) | Version: | 2.0 |
Keywords: | Cc: |
Description
Не совсем разобрался со static методами и переменными в классе Test. Из-за того, что тесты необходимо запускать из test.cpp, а не Test.cpp, происходит ошибка линковки: компилятор не видит static методы. Есть предположение, что я идейно чего-то не понимаю, поэтому реализовал все в одной единице трансляции Test.cpp. Help.
+ еще есть пару вопросов, закоменченных в коде.
Change History (4)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Корректность
- Доску при неверном ходе выводить не нужно.
{hw_02}[2197]$ pwd && svn up && svn status /home/hfx/dvl/cpp19/gabitov.daniil/hw_02 Updating '.': At revision 2931. {hw_02}[2198]$ make mkdir -p obj g++ -c -o obj/main.o -std=c++11 -Wall -Werror -Wextra -Iinclude src/main.cpp g++ -c -o obj/Board.o -std=c++11 -Wall -Werror -Wextra -Iinclude src/Board.cpp g++ -c -o obj/StdioBoardView.o -std=c++11 -Wall -Werror -Wextra -Iinclude src/StdioBoardView.cpp g++ -o hw_02 obj/main.o obj/Board.o obj/StdioBoardView.o g++ -c -o obj/test.o -std=c++11 -Wall -Werror -Wextra -Iinclude test/test.cpp g++ -c -o obj/BoardTest.o -std=c++11 -Wall -Werror -Wextra -Iinclude test/BoardTest.cpp g++ -c -o obj/Test.o -std=c++11 -Wall -Werror -Wextra -Iinclude test/Test.cpp g++ -o test_hw_02 obj/test.o obj/BoardTest.o obj/Board.o obj/Test.o {hw_02}[2199]$ ./hw_02 .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... O move: 0 0 O......... .......... .......... .......... .......... .......... .......... .......... .......... .......... X move: 0 0 Bad move! O......... .......... .......... .......... .......... .......... .......... .......... .......... .......... X move:
- ход, состоящего из одной координаты, должен считаться некорректным + valgrind находит утечки памяти при некорректном вводе;
{hw_02}[2207]$ ./hw_02 .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... O move: 0 ^C
- есть баг в определении статуса партии (доска заполнена, последним ходом крестики выигрывают, но программа говорит, что ничья).
Стиль
Board
.h
- не соблюдается единый стиль именования методов и полей;
24: не только переименовать, еще const добавить или даже static и, главное, перенести во view.
.cpp
33: (фатальное) сообщение об ошибке лучше печатать в stderr (стандартный поток для вывода ошибок, без буферизации);
55: имя не очень удачное: глядя на него кажется, что функция возвращает победителя, тогда как она его "устанавливает" в значении "сохраняет в поле объекта";
59: в check логика дублируется, попробуйте от этого избавиться (корректность работы метода из-за дублирования и имен перемeнных неочевидна);
60: а вот и баг;
64, 65: row_i
[ndex], col_i
[ndex] типа std::size_t;
78: имя слишком общее. Глядя на него неясно, что в x нового (с тем же успехом могли назвать x_minus_diff, императивно). Глядя на имя, в идеале должно быть понятно зачем diff из x вычитали (бтв, diff тоже так себе название в данном контексте);
119+: пусты строки зачем-то.
StdioBoardView?.cpp
10: со свичом было бы компактнее и более последовательно кмк
const char *msg = nullptr; switch (board.getState()) { case GameStatus::Continues: msg = "..."; break; ... } assert(msg); puts(msg);
40: кажется, что имя set_next_player лучше отражает происходящее в функции;
Misc
Test.cpp:18. return !failedNum;
Баллы
Корректность: 15;
Стиль: 6.
Решение не собирается:
Не хватает лога сборки с сообщением об ошибке. Я попробовал воспроизвести ошибку, изменив минимально код тестов и починив сборку, но проблема не воспроизвелась:
К слову, папка с кодом тестов должна называться "test", а не "Test"; странно видеть объектные файлы с расширением "out".
checker
в качестве имени метода есть проблема - это существительное, я бы ожидал увидеть такое имя у класса, а не у метода (или подумал, что метод возвращает объект-"проверяльщик" какой-то). Методы лучше называть глаголами в самом общем случае. Не понимаю, чем вамcheck
не угодил, но не настаиваю, еслиchecker
больше нравится (но со стороны такое имя выглядит неожиданно).Корректность
Недочеты, которые увидел:
Стиль
Посмотрел по диагонали, так как код будет дописываться:
x < 0 || 10 <= x
- из записи визуально понятно, чтоx
вне [0, 10);Баллы: корректность 3, стиль 4. Нужно доделывать.