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

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

1

29.12.2013, 13:38

C++ Struct Array Zeiger an eine Funktion innerhalb Klasse übergeben

Hallo ich möchte ein Zeigerarray welches ich mittels:

C-/C++-Quelltext

1
2
SDL_Rect *Rect;
Rect= new SDL_Rect[length_fields*height_fields];


erstellt habe an eine Funktion übergeben die sie einerseits mit einer Farbe füllt und dannach zeichnet, das ganze innerhalb einer Klasse.

so schaut meine Funktion aus:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
void GameField::DrawField(???,   int r, int g, int b, int i, int j)                 // rgb für farben , i und j für 2 schleifen (Breite und Laenge sozusagen)
{
SDL_FillRect(screen,&Rect[length_fields*j+i],SDL_MapRGB(screen->format,r,g,b));
}

void GameField::ShowField(??? ,int i, int j)
{
SDL_BlitSurface(NULL,NULL,screen,&Rect[length_fields*j+i]);



Wie muss ich die Parameter ??? bezeichnen, da sie ja Zeiger sind bzw. noch arrays von Zeigern.
Meine Idee: *Rect[] oder Rect[] aber das klappt irgendwie nicht so richtig. :/
Hat einer von euch ne Idee ?

Danke für eure Hilfe und Geduld im voraus :)
Daedra
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

2

29.12.2013, 13:44

Der Parameter soll vom Typ SDL_Rect* sein, genau so wie deine Variable Rect.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

29.12.2013, 13:46

SDL_Rect* rects[] bzw. da es eh das gleiche ist SDL_Rect** rects
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

4

29.12.2013, 13:57

Anscheinend gibt es doch weitere Probleme zu diesem Fall
Meine Funktion zum F+llen der Position

C-/C++-Quelltext

1
2
3
4
5
6
7
void SetRectSize(SDL_Rect *Rect[], int w, int h, int j)
{

    Rect[j]->w=w;
    Rect[j]->h=h;

}



Falls ich die Schreibweise so verwende wie genannt bekomm ich nen Speicherfehler.
j Schleife

C-/C++-Quelltext

1
SetRectSize(&Rect, 5, 5,  j);


Zugriffsverletzung, bei Position ... Da ist anscheinend so nicht auf das Zeigerarray zugreifen kann.
Woran liegt das aber? Die Schreibweise ist doch korrekt und für das Array wurde ja genügend Speicher reserviert ... :dash:
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Daedra22« (29.12.2013, 14:32)


birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

5

29.12.2013, 14:42

Quellcode

1
2
3
4
5
6
7
8
9
10
11
void SetRectSize(SDL_Rect* Rect, int w, int h, int j)
{
    Rect[j]->w = w;
    Rect[j]->h = h;
}


------------
SDL_Rect* Rect;
...
SetRectSize(Rect,w,h,j);

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

29.12.2013, 14:57

Zitat

Hallo ich möchte ein Zeigerarray...

Mit dem Code hier, erstellst du kein Zeigerarray sondern ein Array aus "SDL_Rect"-Objekten.

In den anderen Funktionen verwendest du allerdings ein Array aus Zeigern. Klar das es nicht geht.
Von der Array Deklaration würde ich in C++ vermeiden und besser immer als Zeiger deklarieren.

"SDL_Rect* Rect" ist ein Zeiger auf viele hintereinander liegende "SDL_Rect"-Objekte.
Bei "SetRectSize" arbeitest du plötzlich mit einen Zeiger auf einen Zeiger: "SDL_Rect** Rect"

C-/C++-Quelltext

1
2
3
4
5
void SetRectSize(SDL_Rect* Rect, int w, int h, int j)
{
    Rect[j].w = w;
    Rect[j].h = h;
}


Du solltest du Benennung von deinen Variablen überdenken. Einfach überall Buchstaben ist ziemlich unübersichtlich. Außerdem wieso "Rect" obwohl es doch mehrere sind? Wenn dann "Rectangles".

Nebenbei möchte ich mal vorsichtig auf "std::size_t" für Arrayindices hinweisen.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

7

01.01.2014, 16:10

Jetzt klappt es danke :)
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Werbeanzeige