Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pozbycie się błędu "niekompletnego typu" w inny sposób

Ostatnio zmodyfikowano 2019-01-04 20:06
Autor Wiadomość
Grzesiek11
Temat założony przez niniejszego użytkownika
Pozbycie się błędu "niekompletnego typu" w inny sposób
» 2018-12-30 15:20:10
Cześć. Pisałem sobie taki projekt, którego nie dokończę, no i dostałem błąd o niekompletnym typie.
20:16: error: field 'player' has incomplete type 'Game::Player'

Kod w tamtym momencie wyglądał mniej więcej tak:
C/C++
//...

class Game {
public:
    //...
private:
    struct Location;
    struct Player;
    struct Object;
    struct Exit;
    enum class DIRECTION;
    std::vector < Location > locations;
    Player player;
};

//...

struct Game::Player {
    std::string name;
    Location * location;
};

//...
Pobawiłem się trochę i wyszło mi coś takiego:
C/C++
//...
class Game {
public:
    //...
private:
    struct Location;
    struct Player {
        std::string name;
        Location * location;
    };
    struct Object;
    struct Exit;
    enum class DIRECTION;
    std::vector < Location > locations;
    Player player;
};

//...
O dziwo, to działa. Ale brzydko wygląda :F Chciałbym mieć deklaracje i definicje w jednym miejscu. Tym bardziej, że każda oprócz tej działa (np.
Location
,
Object
).
P-173366
pekfos
» 2018-12-30 15:31:32
Ale brzydko wygląda :F
To po co trzymasz te struktury wewnątrz klasy?
P-173367
Grzesiek11
Temat założony przez niniejszego użytkownika
» 2018-12-31 15:02:38
To po co trzymasz te struktury wewnątrz klasy?
Widziałem, że niektórzy to robią. Żeby był porządek i tak dalej. Lepiej w takim razie zamknąć je w jednym namespace?
P-173381
pekfos
» 2018-12-31 15:55:08
Robi się tak, kiedy przykładowo chcesz ukryć jakiś typ jako szczegół implementacyjny. Albo gdy dany typ jest w jakimś sensie integralną częścią klasy i powinien tam być. Na pewno nie robi się tego dlatego, że masz klasę "Program" i wszystko chcesz tam wcisnąć, bo "wszystko jest częścią programu". Klasy powinny być osobno, a nie ustawiane jedna na drugiej, chyba że masz ku temu dobry powód.
P-173382
Grzesiek11
Temat założony przez niniejszego użytkownika
» 2019-01-04 20:06:29
Okej... To by było na tyle. Zamykam.
P-173420
« 1 »
  Strona 1 z 1