Zugriff auf Arrays
-
Ja, es soll eine Membervariable sein, zumindest habe ich sie als solche in der headerdatei deklariert.
Warum erhält sie nicht die Adresse?
anders gefragt: wie mache ich es korrekt?
-
du legst ein Feld an von der Grösse m_iBreite*m_iHoehe.
D.h. von 0 bism_iBreite*m_iHoehe-1in den Ausdrücken in der if-Abfrage musst du daher schreiben:
if((n_iX < m_iBreite)&&(n_iY < m_iHoehe))und nicht <= , da du sonst über die Feldgrenzen hinausschießen könntest
-
und damit ich auch die Adresse der Membervariable erreiche schreibe ich:
[cpp]
m_pSpielfeld = new FELDELEMENT[m_iBreite*m_iHoehe];Korrekt?
-
milian84 schrieb:
und damit ich auch die Adresse der Membervariable erreiche schreibe ich:
m_pSpielfeld = new FELDELEMENT[m_iBreite*m_iHoehe];Korrekt?
Korrekt.
-
danke für die schnellen und hilfreichen antworten.
ich habe nun ein weiteres problem:
wie übergebe ich die adresse von m_pSpielfeld an eine andere klasse und zwar mittels des konstruktor, also über main()?
-
milian84 schrieb:
danke für die schnellen und hilfreichen antworten.
ich habe nun ein weiteres problem:
wie übergebe ich die adresse von m_pSpielfeld an eine andere klasse und zwar mittels des konstruktor, also über main()?
Du übergibst das Element einer Funktion mit func(m_pSpielfeld).
Funktionen kannst du eigentlich überall aufrufen, aber main() kann kein Konstruktur einer Klasse sein...
-
sorry, hatte mich nicht genau ausgedrückt.
Ich rufe in main() einen konstruktor auf, der einen Zeiger übergeben soll. Dieser Zeiger soll eben auf das aktuelle Spielfeld, also m_pSpielfeld. Wie bekomme ich jetzt aus der Klasse CSpielfeld raus, wo m_pSpielfeld steht?
-
konkret:
Ich habe eine Klasse A in der ich über eine Membervariabele m_pZeiger ein Array definiert habe. Dies habe mit einem neuen Datentypen gefüllt.
Ich habe eine weitere Klasse B definiert in der ich einzelne Daten des Array aus Klasse A ändern möchte. Dazu möchte ich mit dem Konstruktor für Klasse B einen Zeiger auf die Klasse A und damit auf den Anfang des Arrays übergeben.
Wie stelle ich das an?
-
Bei "guter" objektorientierter Programmierung sollte eigentlich keine Klasse B die Memberdaten von Klasse A ändern dürfen!
Aber mir fallen konkret 2 Möglichkeiten ein:
- Du übergibst der Klasse B einen Pointer auf die Klasse A. Klasse B ruft Memberfunktionen der Klasse A auf, welche die Daten verändert.
- Du baust die Funktionalität der Klasse B (k.A. wie komplex die ist und ob das sinnvoll ist) in Memberfunktionen der Klasse A ein, da die Klasse B ja Daten der Klasse A verändern soll...
-
ich will möglichkeit 1 machen.
die klasse die verändert werden soll heißt zb CSpielfeld. Mit CMaus möchte ich das verändern. Jetzt habe ich in main den konstruktor so geschrieben:
CMaus NeueMaus(CSpielfeld* n_pSpielfeld)
ich komme aber einfach nicht drauf welchen Wert ich für CSpielfeld* (...) übergeben soll. Es muss ja ein Zeiger auf den Anfang des Arrays aus CSpielfeld sein. Also muss es ja die Adresse vom ersten Element sein, oder?
Und wie krieg ich die aus CSpielfeld raus?
-
nein du willst nicht das array sondern die klasse übergeben.
außerdem würde ich eine referenz statt einem zeiger nehmen, das ist einfacher.mfg.
-
Wie asdasdasd (^^) schon sagt, du übergibst einen Verweis (egal ob Referenz oder Zeiger) auf die Klasse an CMaus. CMaus kann jetzt mit der Klasse CSpielfeld interagieren, allerdings sollte das wirklich nur über Member-Funktionen passieren.
Du könntest in deine CSpielfeld-Klasse doch ne Funktion SetField( x, y, Wert ) einbauen. Darin prüfst du dann x und y auf die Grenzwerte vom Spielfeld und Wert auf Validität.
Dann kannst du bequem und sicher mit der CMaus-Klasse das Spielfeld modifizieren.