Pozbycie się błędu "niekompletnego typu" w inny sposób
Ostatnio zmodyfikowano 2019-01-04 20:06
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:
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: 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 ). |
|
pekfos |
» 2018-12-30 15:31:32 To po co trzymasz te struktury wewnątrz klasy? |
|
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? |
|
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. |
|
Grzesiek11 Temat założony przez niniejszego użytkownika |
» 2019-01-04 20:06:29 Okej... To by było na tyle. Zamykam. |
|
« 1 » |