• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Użycie zmiennej z innej klasy która jest zapisana w innym pliku .h .cpp.

VPS Starter Arubacloud
0 głosów
725 wizyt
pytanie zadane 15 maja 2016 w C i C++ przez Damian_Dusinski Nowicjusz (120 p.)

Witam. Pisze sobie pomału grę tekstową w konsoli i mam taki problem.

Mam clase Map_0 i w niej chce wyświetlić (modyfikować itp) zmienne z classy Gracz.

I kombinuje na wszystkie sposoby, ale nie mogę sobie z tym poradzić.

Szukałem jakiś sposobów w necie ale wszystko opiera się na jednym pliku a nie na kilku ;/.

Z góry dziękuje za pomoc.

Pozdrawiam

Damian Dusiński.

 

1 odpowiedź

0 głosów
odpowiedź 15 maja 2016 przez Ehlert Ekspert (212,630 p.)

Nie rozumiem. Dla wszystkich pól klasy które stanowią jej funkcjonalność "z zewnątrz" robisz metody set oraz get. I wszystko śmiga. Przy plikach *.hpp pamiętaj o wierszyku:

#ifndef GRANDFATHER_H
#define GRANDFATHER_H

struct foo {
    int member;
};

#endif /* GRANDFATHER_H */

Tworzysz instancję obiektów i wszystko gra. Jeśli nie pomogłem musisz doprecyzować problem.

komentarz 15 maja 2016 przez Damian_Dusinski Nowicjusz (120 p.)
Wszystko mam ustawione na public.

Wszystkie clasy mam zrobione w plikach .h i .cpp

i odczytuje je z mein.

i w clasie Gracz mam zmienne ustawione przez konstruktor np:

int zycie = 2

int sila = 1

itp...

i te zmienne chce wyświetlić w clasie Map_0.

no i pisze sobie cout << gracz_1(obiekt clasy Gracz).zycie;

No i program wykrywa jakiś błąd i nie wystartuje ;/.

Korzystam z Visual Studio 2013.
komentarz 15 maja 2016 przez Ehlert Ekspert (212,630 p.)

Prawdopodobnie gracz_1 nie jest w zasięgu klasy Map_0. To nie jest kwestia o tyle błędu logicznego(mimo, że to błąd), co projektowego. Klasa mapa powinna przechowywać informacje o mapie, posiadać tekstury, znaki, informacje o terenie itp., a nie zajmować się graczem.

Pomijam kwestię umieszczania wszystkiego publicznie w klasie, co jest niedorzecznością patrząc z obiektowego punktu programowania.

komentarz 15 maja 2016 przez Damian_Dusinski Nowicjusz (120 p.)
Wszystko mam ustawione na public bo chce zlokalizować błąd.

Clasa Map_0 chce tylko wyświetlić stan życia i tyle.

I mogę to w każdej chwili zmienić tylko chce wiedzieć dlaczego jest poza zasięgiem clasy.

Jak to odczytać w przyszłości.
komentarz 15 maja 2016 przez Ehlert Ekspert (212,630 p.)

Wklej gdzieś.

komentarz 15 maja 2016 przez Damian_Dusinski Nowicjusz (120 p.)
mein

#include <iostream>
#include <Windows.h>
#include "gracz.h"
#include "show.h"


using namespace std;

int main()
{
	Gracz gracz_01;
	cout << gracz_01.zycie;
	cout << gracz_01.zycie;
	Sleep(1000);
	Show show_0;

	show_0.odczyt_gracz();
	
}

Gracz.h

#include <iostream>


using namespace std;

class Gracz
{
public:
	int zycie;
	int sila;

	Gracz();

};

Gracz.cpp

#include <iostream>

#include "gracz.h"


using namespace std;


	Gracz::Gracz()
	{
		 zycie = 1;
		 sila = 1;
	}


show.h

#include <iostream>


using namespace std;

class Show
{
public:
	void odczyt_gracz();
};


show.cpp

#include <iostream>

#include "show.h"


using namespace std;



void Show::odczyt_gracz()
{
	cout << gracz_01.zycie;

}


No i w show.cpp nie chce już działać ;/

komentarz 15 maja 2016 przez Ehlert Ekspert (212,630 p.)

No to jest oczywiste, że to nie działa. Skąd metoda odczyt_gracz ma wiedzieć o istnieniu instancji gracz_1. Musisz przekazywać go w argumencie, najlepiej w taki sposób:

void Show::odczyt_gracz(const Gracz & player)
{
    cout << player.zycie;
 
}

 

komentarz 15 maja 2016 przez Damian_Dusinski Nowicjusz (120 p.)
Myślałem, że tak mam to zapisać 

void Show::odczyt_gracz(class Gracz & gracz_01)
{
	cout << gracz_01.zycie;

}

Ale to nie to ;/.

Chyba muszę poczytać jakiś poradnik o clasach ;/

Podobne pytania

0 głosów
2 odpowiedzi 1,325 wizyt
pytanie zadane 22 sierpnia 2020 w Java przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 2,479 wizyt
0 głosów
5 odpowiedzi 724 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...