saper c++ ustawienie poziomu trudności gry - typ wyliczeniowy enum

0

Witam, piszę popularną grę saper w c++. Mam problem z ustawieniem poziomu trudności gry. Zgodnie z poleceniem ma to wyglądać następująco:

    enum GameMode  { DEBUG, EASY, NORMAL, HARD };

    class MinesweeperBoard
    {
        // ...
    
    public:
        MinesweeperBoard();
        MinesweeperBoard(int width, int height, GameMode mode);
        // ...
    };

Nie mogę się uporać z tym problemem - "error: default argument missing for parameter 4 of 'MinesweeperBoard::MinesweeperBoard(const string&, int, int, GameMode)'" . Kod podzieliłem na main i klasę Minesweeperboard.

2

To proste. Jak definiujesz wartość domyślną, to wszystkie późniejsze argumenty tej funkcji też muszą mieć wartość domyślną.
Jakby to działało inaczej, to jak kompilator ma ustalić co się ma dziać w przypadku gdy nie podasz wszystkich argumentów?

Alternatywne rozwiązanie to overload konstruktora.

0

Czyli wystarczy, że dam wartość domyślną dla Gamemode?
I mógłbyś rozwinąć co masz na myśli przez overload konstruktora?

1
cpp_enjoyer napisał(a):

I mógłbyś rozwinąć co masz na myśli przez overload konstruktora?

class MinesweeperBoard {
...
MinesweeperBoard(const std::string & type);
MinesweeperBoard(const std::string & type, GameMode mode);
MinesweeperBoard(const std::string & type, int width, int height, GameMode mode);
...
};
MinesweeperBoard::MinesweeperBoard(const std::string & type)
: MinesweeperBoard(type, 20, 20, NORMAL)
{}

MinesweeperBoard::MinesweeperBoard(const std::string & type, GameMode mode)
: MinesweeperBoard(type, 20, 20, mode)
{}

MinesweeperBoard::MinesweeperBoard(const std::string & type, int width, int height, GameMode mode)
....
0

Hmm to jeden problem z głowy, dzięki. Jednak drugi wszedł na miejsce pierwszego: "error: no matching function for call to 'MinesweeperBoard::MinesweeperBoard(<brace-enclosed initializer="initializer" list="list">)'"
Kompilator wskazuje na linijkę w main.cpp przy wywołaniu konstruktora z argumentami. Dodatkowo ten fragment kody jest zacioniowany - nie używany:

                MinesweeperBoard::MinesweeperBoard(20,20) :m_width(width), m_height(height){}
0

A co to a być?

 MinesweeperBoard::MinesweeperBoard(20,20)
0

To jest pierwsza implementacja konstruktora, jest w pliku MINESWEEPERBOARD.CPP w pierwszej linijce kodu.

0

A w której grupie robicie dopiero implementację konstruktora tej klasy?

To przecież powinniście miec gotowe od co najmniej miesiąca...

W razie czego przypominam, że konsultacje mam tuż po czwartkowym wykładzie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1