Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Soulfly32 Mini JLI'ler
Anmeldedatum: 29.04.2004 Beiträge: 4
Medaillen: Keine
|
Verfasst am: 03.07.2004, 13:45 Titel: Array als Methoden-Rückabewert |
|
|
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 |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.07.2004, 13:59 Titel: |
|
|
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 |
|
|
Soulfly32 Mini JLI'ler
Anmeldedatum: 29.04.2004 Beiträge: 4
Medaillen: Keine
|
Verfasst am: 03.07.2004, 14:01 Titel: |
|
|
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 |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 03.07.2004, 14:03 Titel: |
|
|
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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.07.2004, 14:46 Titel: |
|
|
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 |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 03.07.2004, 14:48 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.07.2004, 17:28 Titel: |
|
|
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 |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 03.07.2004, 17:31 Titel: |
|
|
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 |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 03.07.2004, 19:36 Titel: |
|
|
@ 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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.07.2004, 19:48 Titel: |
|
|
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 |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 03.07.2004, 19:52 Titel: |
|
|
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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.07.2004, 20:04 Titel: |
|
|
Ja, weil es eine Struktur/Klasse und kein Zeiger ist. |
|
Nach oben |
|
|
|