[C++] Reverse Array[Gelöst]

TooR

0 8 15
ID: 113427
L
19 Juni 2006
322
21
Hallo,

ich sitze gerade an eine Übungsaufgabe, welche ein Array umkehren soll, jedoch kein neues erstellen.

Bis jetzt bin ich so weit gekommen:

Code:
#include <iostream>

using namespace std;

template <class type>
type reverseArray(type arry[], type lenght){
	zaehler = lenght;
	for (int h=0; h<(lenght/2); h++){
		int tmp = arry[h];
		arry[h] = arry[zaehler];
		arry[zaehler] = temp;
		zaehler--;
	}
	return arry;
}

int main(){
	int arry[] = {1,2,3,4};
	int lenght = sizeof(arry) / sizeof(int);
	cout << "Das Array: ";

	for (int i = 0; i < lenght; i++){
		cout << arry[i] << ",";
	}

	cout << " wird umgedreht zu: ";
	arry[] = reverseArray(arry,lenght);

	for (int j = 0; j < lenght; j++){
		cout<< arry[j] << ",";
	}

	cout << endl;
}

Der Compiler liefert für Zeile 27 folgenden fehler:

error C2059: Syntaxfehler: ']'

Wäre nett wenn mir jemand helfen kann diesen Fehler zu beheben.
 
Zuletzt bearbeitet:
Hi,

meiner Meinung nach müsste es:
arry = reverseArray(arry,lenght);
heißen.

Du hast das Array ja schon initialisiert und musst es nur noch mit seinem Identifier ansprechen.

PlaciD
 
Das hatte ich auch schon ausprobiert, jedoch liefert er dann diesen Fehler:

error C2440: '=': 'int' kann nicht in 'int [4]' konvertiert werden
Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt
 
Okay, an der Funktion gibts folgende Macken:
  • Der Rückgabetyp der Funktion stimmt nicht. "arry" ist ein Array von "type", das kannst du nicht als einzelnen "type"-Wert zurückgeben.
  • "length" würde ich als int festlegen, da dein Template sonst bei anderen Datentypen (z.B. float) nicht funktionieren würde.
  • Ansonsten ist diese schreibweise mit den [] etwas ungünstig, da in der Regel eher mit Pointern gearbeitet wird, als mit Arrays.
  • zaehler wurde nicht deklariert (sollte wohl ein int sein?)
  • Das letzte Element des Array hat den Index length-1, dem entsprechend sollte auch zaehler initialisiert werden.
  • tmp bzw. temp Tippfehler (Wer hat sich überhaupt diese unschön abgekürzten Variablennamen ausgedacht.)
Code:
template <class type>
type *reverseArray(type *arry, int lenght){
    int zaehler = lenght-1;
    for (int h=0; h<(lenght/2); h++){
        int tmp = arry[h];
        arry[h] = arry[zaehler];
        arry[zaehler] = tmp;
        zaehler--;
    }
    return arry;
}
Die Main:
  • Die Zuweisung des Rückgabewertes solltest du nochmal überdenken! Zum einen werden Arrays "nur" als Adresse an die Funktion übergeben werden, sprich du drehst ohnehin schon direkt an dem Array aus der main() herum.
  • An (statische) Arrays lassen sich keine Wert mittel des = Operators zuweisen.
  • Die int main() sollte auch einen int-Wert zurückgeben; "return 0;"
Code:
int main(){
    int arry[] = {1,2,3,4};
    int lenght = sizeof(arry) / sizeof(int);
    cout << "Das Array: ";

    for (int i = 0; i < lenght; i++){
        cout << arry[i] << ",";
    }

    cout << " wird umgedreht zu: ";
    reverseArray(arry,lenght);
    for (int j = 0; j < lenght; j++){
        cout<< arry[j] << ",";
    }
    cout << endl;

    return 0;
}
MfG
Sven