Tablica obiektów w deklaracji klasy. Bez konstruktora domniemanego.

0

Cześć :)

Piszę sobie program i dostaję błąd:

brace-enclosed initializer used to initialize `PLAYER_SET'

Kod:

class GAME_SET
{ 
private:
    PLAYER_SET Player_set[4] = { {8, 20, CHARACTER_RED},
                                              {428, 20, CHARACTER_BLUE},
                                              {8, 343, CHARACTER_GREEN},
                                              {428, 343, CHARACTER_YELLOW}
                            };
}

konstruktor klasy PLAYER_SET:

explicit PLAYER_SET(int xx, int yy, int col = CHARACTER_RED); 

Dowiedziałem się już że błędem jest inicjalizacja obiektów klasy w deklaracji klasy. Podejrzewam że powinno być po prostu:

PLAYER_SET Player_set[4]; 

Tylko potem nie wiem gdzie mam zainicjalizować tą tablicę.

Dacie radę pomóc?
Dzięki :)

1
class GAME_SET
  { 
   private:
   static const PLAYER_SET Player_set[];
   static const unsigned Player_set_count;
  };
const PLAYER_SET GAME_SET::Player_set[]=
  {
   PLAYER_SET(8, 20, CHARACTER_RED),
   PLAYER_SET(428, 20, CHARACTER_BLUE),
   PLAYER_SET(8, 343, CHARACTER_GREEN),
   PLAYER_SET(428, 343, CHARACTER_YELLOW),
  };
const unsigned GAME_SET::Player_set_count=sizeof(GAME_SET::Player_set)/sizeof(*GAME_SET::Player_set);
0

O super :) bardzo dziękuję za odpowiedź. Pomogło. Wprawdzie nie mogłem zostawić const bo coś się pluł... ale czy takie tablice zawsze muszą być static? bo z tego co kojarzę to skoro są static są wspólne dla wszystkich obiektów danej klasy.

0

W C++11 już nie muszą.
W obecnie powszechnym standardzie C++ możesz jedynie dodawać dynamicznie.
Nie wywalaj const. Dodaj const w tych miejscach gdzie się pluło.

0

No to takiego bohomaza mi wywala:
In member function void GAME_SET::run()':| error: passing const PLAYER_SET' as this' argument of int PLAYER_SET::Get_X()' discards qualifiers
error: passing const PLAYER_SET' as this' argument of int PLAYER_SET::Get_Y()' discards qualifiers error: passing const PLAYER_SET' as this' argument of SDL_Surface* PLAYER_SET::Get_image()' discards qualifiers
== Build finished: 3 errors, 0 warnings ===

Pojawia się przy wywołaniu:

apply_surface(Player_set[i].Get_X(), Player_set[i].Get_Y(), Player_set[i].Get_image(), screen);

a deklaracja funkcji:

void apply_surface(int x, int y, SDL_Surface *co, SDL_Surface *cel, SDL_Rect *clip)
0

int PLAYER_SET::Get_X()const { ... }
int PLAYER_SET::Get_Y()const { ... }
Przecież te funkcje nie zmieniają żadnych składowych klasy PLAYER_SET i nie powinni.

0

Ehh xD Przepraszam ale po kolei bo za szybko i już się gubię:

class PLAYER_SET
{
public:
int Get_Color();
int Get_X() {return x;}
int Get_Y() {return y;} 
};

Błąd wywala tutaj

 
for (int i=0; i<4; i++)
        {
            apply_surface(Player_set[i].Get_X(), Player_set[i].Get_Y(), Player_set[i].Get_image(), screen);
        }

Funkcja apply_surface:

 void apply_surface(int x, int y, SDL_Surface *co, SDL_Surface *cel, SDL_Rect *clip)

No a błąd z build messages to już podałem wcześniej.

1
class PLAYER_SET
  {
   public:
   int Get_Color()const;
   int Get_X()const {return x;}
   int Get_Y()const {return y;} 
  };

int PLAYER_SET::Get_Color()const
  {
   ...
  }
0

Normalnie mam ochotę Cię przytulić :D dziękuję ^^

Dobra... wszystko poszło pięknie ładnie. Tylko że znalazł mi błęda którego już nawet debugger nie widzi i tylko windows wywala że musi zamknąć program (opcja: wystąpił problem z aplikacją i zostanie ona zamknięta). Z tego co gdzieś podsłuchałem to można wyświetlić jak się program skompilował czy coś? No bo jak mam duży projekt to takiego błędu ja nie potrafię już wyśledzić.

0

Gdzieś mażesz po pamięci, znajdź gdzie.

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