Я написал следующий класс, который отслеживает координаты шахматных фигур на доске
и проверяет правильность координат. Значение для любой координаты (x, y) x и y должно находиться в диапазоне [0, 7].
Вот реализация класса координат:
Код: Выделить всё
inline bool valid_coord(const int x, const int y)
{
if (x < 0 || x > game_settings::square_count.first) return false;
if (y < 0 || y > game_settings::square_count.first) return false;
return true;
}
class Board_coord
{
public:
Board_coord(const int x, const int y)
{
if (!valid_coord(x, y))
{
BOOST_THROW_EXCEPTION(std::invalid_argument(
std::format("({},{}) is not a valid coordinate", x, y)));
}
x_coord = x;
y_coord = y;
}
int get_x() const noexcept { return x_coord; }
int get_y() const noexcept { return y_coord; }
bool operator==(const Board_coord& other) const
{
return (x_coord == other.x_coord && y_coord == other.y_coord);
}
friend Board_coord operator+(const Board_coord& lhs, const Board_coord& rhs);
private:
int x_coord;
int y_coord;
};
Board_coord operator+(const Board_coord& lhs, const Board_coord& rhs)
{
return Board_coord{ lhs.get_x() + rhs.get_x(), lhs.get_y() + rhs.get_y() };
}
Код: Выделить всё
Board_coord p0{ 4, 3 };
Board_coord p1{ 3, 2 };
Board_coord p2{ p0 + p2 };
Добавьте функцию __cdecl game_logic::Board_coord::Board_coord(const
int,const int) Тип динамического исключения: struct boost ::wrapException std::Exception::what: (-858993456,-858993457)
не является допустимым координата
Если я не совсем что-то упустил из виду: не должна ли в этом случае компиляция завершиться неудачно при попытке использовать необъявленную переменную?
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-a-comp
Мобильная версия