konstruktor zagnieżdżonej klasy

konstruktor zagnieżdżonej klasy
tBane
  • Rejestracja:ponad rok
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:312
0

Witam. Próbuję napisać konstruktor zagnieżdżonej klasy. Dlaczego konstruktor wyrzuca błąd ? Chciałbym uzyskać taki efekt, żeby w podpowiedziach kodu poza klasą CharacterInfoPanel nie były widoczne te zagnieżdżone klasy.

Kopiuj
class CharacterInfoPanel : public Panel {

	class CharacterInfoMenuButton {
		
		CharacterInfoMenuButton();
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Statistics : private CharacterInfoMenuButton {

		Statistics() : CharacterInfoMenuButton() { /*error*/ }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Layout : private CharacterInfoMenuButton {

		Layout() : CharacterInfoMenuButton() { /*error*/ }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Dialogues : private CharacterInfoMenuButton {

		Dialogues() : CharacterInfoMenuButton() { /*error*/ }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Quests : private CharacterInfoMenuButton {

		Quests() : CharacterInfoMenuButton() { /*error*/ }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 1x, ostatnio: tBane
tBane
  • Rejestracja:ponad rok
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:312
0

Zrobiłem coś takiego i się kompiluje, ale czy to jest poprawny kod ?

Kopiuj
class CharacterInfoPanel : public Panel {

	class CharacterInfoMenuButton {
	public:
		CharacterInfoMenuButton();
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Statistics : protected CharacterInfoMenuButton {

		Statistics() : CharacterInfoMenuButton() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Layout : protected CharacterInfoMenuButton {

		Layout() : CharacterInfoMenuButton() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Dialogues : protected CharacterInfoMenuButton {

		Dialogues() : CharacterInfoMenuButton() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Quests : protected CharacterInfoMenuButton {

		Quests() : CharacterInfoMenuButton() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};
};

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
SL
  • Rejestracja:około 7 lat
  • Ostatnio:26 minut
  • Postów:896
0

Przecież masz prywatne konstruktury, wszędzie używasz class bez public.

Dziediczenie po czymś innym niż public to sztuka dla sztuki i tak się generalnie nie robi. Poczytaj o composition over inheritance

Miang
jak się nie umi to się nie robi ;)
tBane
  • Rejestracja:ponad rok
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:312
0

Poczytałem. Wiem jak robić klasy dziedziczące bez zagnieżdżenia. Po prostu chciałem uzyskać takie klasy do których spoza klasy CharacterInfoPanel nie ma się dostępu


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 20 godzin
  • Postów:2096
0

@tBane: a nie wystarczyło użyć namespace ? Nagle zajdzie potrzeba większej widoczności klas i znowu COPY/PASTE ?


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
tBane
  • Rejestracja:ponad rok
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:312
0

@Marius.Maximus otóż jest to kod wywoływany tylko raz. Dlatego ponawiam pytanie.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 20 godzin
  • Postów:2096
0

A jakie jest pytanie ?

Umieszczanie klasy w klasie dla mnie jest jak najbardziej poprawne .

W klasach które dziedziczą po CharacterInfoMenuButton możesz użyć
using CharacterInfoMenuButton::CharacterInfoMenuButton
ale to raczej cukier skladniowy


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
tBane
  • Rejestracja:ponad rok
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:312
0

Dobra. Już znalazłem rozwiązanie. Wszędzie należy użyć public i wtedy działa i podpowiedzi są takie jak trzeba.

Kopiuj
class CharacterInfoPanel : public Panel {
public:
	class CharacterInfoPage {
	public:
		CharacterInfoPage() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Statistics : public CharacterInfoPage {
	public:
		Statistics() : CharacterInfoPage() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Layout : public CharacterInfoPage {
	public:
		Layout() : CharacterInfoPage() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Dialogues : public CharacterInfoPage {
	public:
		Dialogues() : CharacterInfoPage() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

	class Quests : public CharacterInfoPage {
	public:
		Quests() : CharacterInfoPage() { }
		void handleEvent(sf::Event& event) { }
		void update() { }
		void draw() { }
	};

public:
	std::vector < CharacterInfoPage* > pages;


	CharacterInfoPanel() : Panel() {

		pages.push_back(new Statistics());
		pages.push_back(new Layout());
		pages.push_back(new Dialogues());
		pages.push_back(new Quests());

	}

	~CharacterInfoPanel() { }
	void handleEvent(sf::Event& event) { }
	void update() { }
	void draw() { }

};

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 2x, ostatnio: tBane

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.