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

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

05.04.2015, 22:23

Array Referenz Problem

Hallo, ich habe ein kleines Problem.
Und zwar hab ich ein dynamisches Array. Es ist generisch und hat hier als Typ eine selbst erstellte Struktur.
Dort lagere ich Elemente drinnen. Nun will ich an den Nutzer über eine Funktion Referenzen auf diese Elemente weitergeben.

Der Zugriffsoperator des Arrays gibt mir aber nur eine konstante Referenz zurück, die ich natürlich so nicht verwenden kann.
Ist es hier sicher einen const_cast durchzuführen in eine normale Referenz? Ich habe noch nie const_cast verwendet, deswegen weiß ich nicht, ob das hier in Ordnung ist.
Andernfalls habe ich noch die Idee Pointer im Array zu lagern, aber ich dachte Referenzen auf die Variablen im Array wären einfacher.

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

2

05.04.2015, 22:34

Und zwar hab ich ein dynamisches Array.

Was genau meinst du? std::vector, pointer, ANSI-C array?
Du hast nicht mal erwähnt, um welche Programmiersprache es geht, aber ich kenne "const_cast" jetzt nur von C++.
Zeig mal ein klein wenig Code, damit man besser nachvollziehen kann, was du genau machst.

const_cast sollte man nur im dringenden Notfall verwenden und am besten nur,
wenn es intern genutzt wird, d.h. ein Client Programmierer (z.B. ein Nutzer deiner Bibliothek) nichts davon mitbekommt.
Wenn ich const_cast an einer Stelle im Code verwende, steht immer ein riesiger Kommentar davor,
der genau erklärt warum, wieso und weshalb das dort steht, inklusive Erklärung, warum es an dieser Stelle sicher ist.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

05.04.2015, 22:36

Ist ein Typ der Unreal Engine.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
// Header
TArray<FGroundTile> Tiles;

// Code

FGroundTile& ATiledWorldGround::GetTileByID(int32 ID) const
{
    return (this->Tiles[ID]); // Fehler
}

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

05.04.2015, 22:39

Ich vermute der Fehler liegt darin, dass deine Funktion "const" ist, und damit wird aus jeder Member Variable, die du mit "this->" ansprichst, ein konstantes Objekt.
D.h. "this->Tiles" ist konstant und du kannst daher nut "const FGroundTile&" zurückgeben.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

5

05.04.2015, 22:43

Ja ich werde das überprüfen, ich dachte schon dass es da vielleicht Probleme gibt wenn ich da so was mit const machen will, aber das hatte ich nicht erwartet.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

6

05.04.2015, 22:51

Funktioniert jetzt, danke.
Nochmal zum Mitschreiben für mich: Bei Rückgabe von Referenztypen kein const?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

05.04.2015, 23:05

Const bei einer Methode heißt, dass sie keinerlei Dinge am Objekt oder seinen Membern ändert. Nichts! Damit der Compiler das hinbekommt, werden alle von ihr verwendeten Member-Variablen und dergleichen ebenfalls als const betrachtet.
Wenn sie Dinge ändern können soll (oder Member als nicht const zurückliefern soll), darf sie nicht const sein.

PS: Siehe auch http://stackoverflow.com/questions/50554…member-function
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (05.04.2015, 23:11)


Werbeanzeige