Jak stworzyć w klasie pole tablicę typu klasowego?

0

Cześć, zastanawiam się jak stworzyć w klasie pole tablicę typu klasowego. Użytkownik podaje rozmiar tablicy. Mam taką klasę:

class Sala
{
	int IloscMiejsc;
	Miejsce WszystkieMiejsca[IloscMiejsc];
	public:
		Sala();
		~Sala();
	protected:
};

Mam błąd

[Error] 'Miejsce' does not name a type
1
  • Albo zastosować std::vector;
  • Albo zastosować dynamiczną alokację tablicy za pomocą operatora new, a później zniszczyć przez delete[].

W C++ nie ma VLA więc nie możesz zrobić tak jak pokazałeś czyli ustawić tak rozmiaru tablicy.

http://www.cplusplus.com/reference/vector/vector/
https://stackoverflow.com/questions/4029870/how-to-create-a-dynamic-array-of-integers

2

@Raddek, to co napisał @grzesiek51114 się zgadza. Dlaczego nie możesz tego zrobić - wielkość typu musi być znana w czasie kompilacji np.
int ma rozmiar 4 bajty, Miejsce ma jakiś rozmiar M, ale tablica Miejsce[iloscMiejsc] nie jest stałą. W teorii da się osiągnąć coś takiego w C, robiąc strukturę gdzie ostatnim polem jest tablica o rozmiarze 1 i alokując więcej niż tej strukturze jest potrzebne i poźniej odnosząc się poza pamięć która wiesz, że ma wystarczająco miejsca - generalnie prawdopodobnie nigdy nie będziesz musiał tego tricku użyć w praktyce. To co chcesz to prawdopodobnie jest po prostu:

typedef vector<Miejsce> Sala;

albo:

class Sala {
   vector<Miejsce> miejsca;
};

w tym przypadku vector ma stały rozmiar w trakcie kompilacji: rozmiar i wskaźnik na miejsce w pamięci gdzie vector trzyma dane (+ inne bajery potrzebne do implementacji)

2

Chciałbym przy pomocy tablicy dynamicznej bo vektorów jeszcze nie używałem,

class Sala {
	int IloscMiejsc;
	Miejsce * WszystkieMiejsca;
	public:
		Sala();
		~Sala();
	protected:
};
Sala::Sala()
{
	IloscMiejsc=30;
	WszystkieMiejsca=new Miejsce[IloscMiejsc];
}

Sala::~Sala()
{delete [] WszystkieMiejsca;
}

coś robię nie tak?

2

Wygląda w porządku. Można by się pokusić o warunek if(WszystkieMiejsca) delete [] WszystkieMiejsca; w destruktorze.

0

<prawie_offtop>Polecam przy okazji poczytać o regule 3/5 (w zależności jakiego C++ używasz)</prawie_offtop>

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