Arraygröße zuerst berechnen...

KeiWaran

Grünschnabel
Hi Leutz,
ich hab ein kleines Problem. Ich weiß die größe des Feldes nicht (die tu ich vorher berechnen lassen). Nur dann kommt mir die Fehlermeldung das ein "konstanter ausdruck" erwartet wird. Also hab ich

So klappts nicht:
PHP:
int anz = 5; //wird vorher berechnet
const int max = anz;
int arr[max] = {0};

vorschlag?

Kei
 
Ja, in die eckigen Klammer dürfen nur Konstanten rein. Eigentlich ist max ja konstant, aber das scheint dein Compiler nicht hinzubekommen. Das heisst, dass du die Arraygrösse zur Laufzeit nicht auf diese Weisse ändern kannst. Das musst du so machen:
Code:
  {
    int anz = 5; //wird vorher berechnet

    //- Allozieren
    int *arr = new int[ anz ];

    //- Zugriff
    arr[ 3 ] = 22;

    //- Freigeben
    delete[] arr;
    arr = 0;
  }
 
und bei mehrdimensionalen arrays?

danke vorerst :)

aber wie mach ichs bei mehrdimensionalen Arrays?
PHP:
int anz = 5; //wird vorher berechnet
int *arr = new int[ anz ][anz][11];  // <- wollts so machen ging aber nicht.

ach ja ich hab doch das feld mit
PHP:
int arr[x]  = {0};

inizialisiert. dann war der ganze Feldinhalt auf 0 gestellt.

Wie mach ichs bei der neuen Methode?

Kei

ps. ähm wiso klappts bei meinem Compiler nicht? ich hab vc++ 6.0 hab mir sogar den service pack 5 runtergeladen und hat nix gebracht.... alternative?
 
ps. ähm wiso klappts bei meinem Compiler nicht? ich hab vc++ 6.0 hab mir sogar den service pack 5 runtergeladen und hat nix gebracht.... alternative?
Ganz einfach, weil das was du vorhast icht C/C++ konform ist, das liegt nicht an irgendwelchen ServicePacks.
Was hast du eigentlich vor. Mir persöhnlich fallen z.B. wenig Gründe ein ein 3 Dimensionales Array zu verwenden.
Versuch doch bessere Datenstruckturen zu verwenden, z.b. struct oder erstell dir eine Klasse.
Du kannst aber auch die STL verwenden, da gibt es wunderbare Container-Template-Klassen.

Gruß Homer
 
:)

Hi Daniel,

was genau ist STL?

das mit dem 3dim. Array ist ganz Simpel. Ich hab ne Map x und y koordinaten. Und jedes Feld enthält noch ein Feld wo 11 Spezifische Eigenschaften des aktuellen Feldes gespeichert werden. Eigentlich ganz Simpel :) Mit mem Feld ist das am Leichtesten. Da hab ich zugriff auch alle Daten zu jeder Zeit. Besonders weil eine Eigenschaft sich auf andere Werte beziehen.

Außerdem ist das nur ein kleines Programm das einige berechnungen durchführt. (eben diese Eigenschaften festlegt). Wollts ursprünglich mit PHP machen aber zum Rechnen ist PHP recht ungeeignet :) Also hab ich mich entschieden den Teil in C++ zu schreiben.

Kei
 
Pack deine 11 Eigenschaften in ein struct oder eine class rein.
Code:
 struct  Feld
{
  int farbe;
  int geruch;
  int vorname;
  int alter;
  // ... und so weiter
};
Wenn du ein zweidimensionales Array benutzen willst, musst du das über ein eindimensionales Array allozieren.
Code:
// 3 * 4 Feld dimensionieren
int breite = 3;
int hoehe = 4;
Feld *arr = new Feld[ 3 * 4 ];

//Zugriff auf 1,2 
arr[  1 + 2 * breite ].alter = 123;
//geht vermutlich auch so (bitte testen)
arr[ 1 ][ 2 ].alter = 123;

Die STL ist nicht so besonders toll für mehrdimensionale Arrays geeignet (aber vermutlich immer noch besser als C-Code). Ich würde in dem Fall allerdings direkt zu multiarray aus der Boost-Library raten. Das ist zumindest für STL-Erfahrene empfehlenswert.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück