JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=048074a9f1886d2b95d78333fcb1e2deMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Array als Methoden-Rückabewert

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Soulfly32
Mini JLI'ler



Anmeldedatum: 29.04.2004
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 13:45    Titel: Array als Methoden-Rückabewert Antworten mit Zitat

Hallo,

vielleicht könnt ihr mir behilflich sein.

Ich versuche herauszufinden, ob man in C++ in eine Methode deklarieren kann die ein Array als Rückgabewert hat, so wie das in Java möglich ist
etwa so:

Code:

bool[] methode()
{
    bool variable[256] ;
    variable[0] = true;

    return variable;
}


Bei dieser Schreibweise gibt es in C++ Probleme.
Gibt es sowas ueberhaupt? Habe selber nichts gefunden.

danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 13:54    Titel: Antworten mit Zitat

du gibst einfach einen zeiger auf das erste element des arrays zurück
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 13:59    Titel: Antworten mit Zitat

Dann muss das Array aber auch eine feste größe haben. Ansosnten must du der Funktion noch einen Zeigfer auf eine Variable übergeben, in der die Arraygröße gespeichert wird.
Achja, vileicht ghet ja:
bool* Funktion()
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Soulfly32
Mini JLI'ler



Anmeldedatum: 29.04.2004
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 14:01    Titel: Antworten mit Zitat

Kannst du mir vielleciht ein beispiel geben.
Weiß nicht wie man dann auf die anderen elemente zugreifen kann.

Danke aber für die anwort.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 14:03    Titel: Antworten mit Zitat

wenn du deinen zeiger mit 1 inkrementierst, zeigt er automatisch auf das nächste element (so hab ichs in erinnerung)
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 14:46    Titel: Antworten mit Zitat

Das Beispiel würde so aussehen:

Code:

bool* methode(void)
{
    bool* arr = new bool[256] ;
    arr[0] = true;

    return arr;
}


Beachten muss du, dass du den Speicher, auf den ein Zeiger zurückgegeben wird, mittels delete[] freigeben muss.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 14:48    Titel: Antworten mit Zitat

Der Arrayname ist ein Pointer auf das erste Element.

Es gilt also:

Code:
array[3] = *(array + 3)


Wenn du einen bool* zurückgibst, kannst du per Indexoperator auf die übrigen Elemente zugreifen:

Code:
bool* B = machBoolArray();
if(B[2] == true) return;


natürlich muss das Array dann dynamisch initialisiert werden.
Allerdings sid dynamisch erzeugt Arrays ein Werk des Teufels, deshalb:

Ich empfehle dir: benutz nen vector<bool>, das macht das alles einfacher. Wenn du nicht weißt, wie du mit nem STL-vector umgehst, kann ich dir gerne noch weiterhelfen.

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 17:28    Titel: Antworten mit Zitat

Man kann ja auch Strukturen zurückgeben. Vieleicht geht das ja:
struct BoolArray
{
bool Inhalt[256]
}

BolArray Funktion()
{
BoolArra x;
x.Inhalt[0]=true;
return x;
}
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 17:31    Titel: Antworten mit Zitat

In der STL gibts aucvh ein "Bitset", wohl genau das, was du suchst, sowas wie ein Vector für Bool-Werte, aber die Dinger hab ich mir noch nicht angesehen...

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 19:36    Titel: Antworten mit Zitat

@ Jonathan_Klein:
Nein so funzt das nicht, am Ende der Funktion sind Variablen, die in der Funktion definiert wurden nicht mehr gültig, man muss schon dynamisch Speicher freigeben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 19:48    Titel: Antworten mit Zitat

Was Jonathan vorschlägt sollte schon gehen, wenn man den return-Wert kopiert:

Code:

struct BoolArray
{
   bool Inhalt[256];
};

BoolArray Funktion()
{
   BoolArray x;
   x.Inhalt[0]=true;
   return x;
}

void f(void)
{
   BoolArray y = Funktion(); // hier wird der komplette Inhalt kopiert
}


Nachteil, ist aber, dass alle Werte kopiert werden und dies nur für einfache Klassen/Strukturen funktioniert. Wenn es komplexer wird und kein korrekter Copy-Konstruktur automatische erzeugt werden kann, muss man einen solchen Konstruktor implementieren, damit es geht.

C.


Zuletzt bearbeitet von Christian Rousselle am 03.07.2004, 20:12, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 19:52    Titel: Antworten mit Zitat

bist du sicher, dass nicht einfach nur der zeiger auf das array kopiert wird ?

ich meine, wenn man array1 = array2; schreibt, wird doch auch nur die adresse kopiert ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.07.2004, 20:04    Titel: Antworten mit Zitat

Ja, weil es eine Struktur/Klasse und kein Zeiger ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum