Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

21

25.09.2006, 20:22

@ Unterklasse: Dann muss man nat. statt 'private' 'protected' verwenden.

@

C-/C++-Quelltext

1
2
 TEigenschaften obj1;
 obj1.KartenArray[1][1].Kartenteil = 1; 


Das ist total falsch, da TEigenschaften nur aus den 2 enthaltenen int-Werten besteht. Das KartenArray ist in der Klasse und kann damit auch nur über objekte der Klasse genutzt werden.

Der Pate

Frischling

  • »Der Pate« ist der Autor dieses Themas

Beiträge: 20

Wohnort: Zwischen Venus und Mars

  • Private Nachricht senden

22

26.09.2006, 13:51

habs natürlich public, damit solte es fkt

ja ist klar das array ist ja von der klasse das Teigenschaften gibt ja nur den variablen typ an

mein problem ist jetzt, das ich ins array schreibe.
aber beim lesen lese ich aus einem anderen array.

ich brauche doch überall das selbe hilf damit ich aufs selbe array zugreife oder

kannst du mir die get methoden mal erklären
oder kann man hilf vieleicht in der oberklasse deklarieren so das alle unterklassen drauf zugreifen können

C-/C++-Quelltext

1
2
3
4
5
6
7
8
  TEigenschaften** KartenArray() 
  { 
    return (_KartenArray); 
  } 
  TEigenschaften KartenTeil( int x; int y ) 
  { 
    return (_KartenArray[x][y]); 
  }


muss ich jetzt für jedes struct element eine get methode schreiben?

euer pate

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

23

26.09.2006, 17:46

Was genau du wo in welcher Instanz vom Array verändern willst ist mir ehrlich gesagt noch nicht klar.

@ Get-Methoden:
Die braucht man natürlich nur, wenn man das Array protected / private definiert. Da ich (wo immer es geht) auf eine saubere Schnittstelle achte hatte ich dein Beispiel entsprechend abgewandelt und 2 verschiedene Zugriffsmethoden eingefügt.

Der Pate

Frischling

  • »Der Pate« ist der Autor dieses Themas

Beiträge: 20

Wohnort: Zwischen Venus und Mars

  • Private Nachricht senden

24

26.09.2006, 18:02

ok

das sieht so aus

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct Kartenstruct
{
 int Terrain;
 int TerrainBild;
 int Ressorcen;
 int RessorcenBild;
};

class TKarte
{
 TKartenstruct KartenArray[100][100];
};


C-/C++-Quelltext

1
2
3
4
class TTerrain : public TKarte
{
 //hier muss ich von dem struct lesen

}


C-/C++-Quelltext

1
2
3
4
class TRessorcen : public TTerrain
{
//hier muss ich von dem struct lesen

}


C-/C++-Quelltext

1
2
3
4
5
class TLand : public TRessorcen
{
//hier muss ich ins struct schreiben

//hier ruf ich dann auch die fkt auf um das terain und ressorcen wiederzugeben, diese methoden liegen aber in den jeweiligen Klassen

}


hilft dir das

wenn ich in einer methode

C-/C++-Quelltext

1
2
3
4
5
void TLand::SpeichernTerrain
{
TKarte Eigenschaften;
Eigenschaften.KartenArray[1][1].Terrain = 5;
}

schreibe
und dann

C-/C++-Quelltext

1
2
3
4
5
6
void TTerrain::LadenTerrain
{
int a;
TKarte Eigenschaften;
a = Eigenschaften.KartenArray[1][1].Terrain;
}

aufrufe
fkt das zwar, aber ich bekomme meine werte nicht raus, weil ich aus zwei verschiedenen array zugreife. irgenwie muss ich doch TKarte Eigenschaften so gestallten das es überall das gleiche ist, oder

danke

euer pate

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

25

26.09.2006, 18:22

Ich hoffe du hast dich verschrieben und meinst mit TKlasse eigentlich TKarte, ansonsten Definition nachreichen.
Ich editier hier gleich noch eine Möglichkeit rein, wo ich versuche dein Problem bisschen zu ordnen und zu lösen.


//

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct Kartenstruct
{
 int Terrain;
 int TerrainBild;
 int Ressorcen;
 int RessorcenBild;
};

class TKarte
{
public:
 TKartenstruct KartenArray[100][100];

 // konstruktor

 TKarte( void )
 {
  for (int i=0; i<100; ++i)
  for (int j=0; j<100; ++j)
  {
   KartenArray[i][j].Terrain = 0;
   KartenArray[i][j].TerrainBild = 0;
   KartenArray[i][j].Ressorcen = 0;
   KartenArray[i][j].RessorcenBild = 0;
  }
 }
};


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
class TTerrain : public TKarte
{
 //hier muss ich von dem struct lesen 

public:
 TKartenstruct Read_KartenArray( int x, int y )
 {
  // obwohl es in der Basisklasse definiert wurde kannst du direkt darauf zugreifen

  return (KartenArray[x][y]);
 }
}


C-/C++-Quelltext

1
2
3
4
5
6
class TRessorcen : public TTerrain
{
 //hier muss ich von dem struct lesen


 // genau gleiche Methode wie in TTerrain

}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TLand : public TRessorcen
{
//hier muss ich ins struct schreiben

public:
 void Write_KartenArray( int x, int y, int value )
 {
   KartenArray[x][y].Terrain = value;
   KartenArray[x][y].TerrainBild = value;
   KartenArray[x][y].Ressorcen = value;
   KartenArray[x][y].RessorcenBild = value;
 }
//hier ruf ich dann auch die fkt auf um das terain und ressorcen wiederzugeben, diese methoden liegen aber in den jeweiligen Klassen


// sollte ja jetzt eigentlich klar sein, wie du auf das Array zugreifst

}


Ich hab jetzt erstmal nur Beispiele gegeben, wie du wo auf KartenArray zugriff hast, ich hab aber eher das Gefühl, dass du in deiner Klassenhierarchie komplett auf dem Holzweg bist und eigentlich was ganz anderes willst.

Der Pate

Frischling

  • »Der Pate« ist der Autor dieses Themas

Beiträge: 20

Wohnort: Zwischen Venus und Mars

  • Private Nachricht senden

26

26.09.2006, 18:28

jo sorry meinte tkarte

euer pate

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

27

26.09.2006, 18:38

*push*

Der Pate

Frischling

  • »Der Pate« ist der Autor dieses Themas

Beiträge: 20

Wohnort: Zwischen Venus und Mars

  • Private Nachricht senden

28

27.09.2006, 10:55

danke,

aber beim aufruf von speichern und laden bekomme ich immernoch eine exception, zugriffsverletzung in der adresse...
das kann doch nicht so schwer sein :roll:

aufruf

C-/C++-Quelltext

1
SpeichernvonTerrain(1, 1, 3, 1);


methode

C-/C++-Quelltext

1
2
3
4
5
void TTerrain::SpeichernvonTerrain(int x, int y, int welches, int welchesBild)
{
 KartenArray[x][y].Terrain=welches; //hier exception

 KartenArray[x][y].TerrainBild=welchesBild;
}


euer pate

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

29

27.09.2006, 11:11

Debugger benutzen.
Das kann doch nicht so schwer sein. :roll:

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

30

27.09.2006, 14:05

ich denke mal viele leuten können mit dem debugger nicht/richtig um gehen

Werbeanzeige