Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Array in C++

Chakhi / 6 Antworten / Flachansicht Nickles

hallo Leute,
ich möchte ein Array erstellen damit ich einen Raster darstellen kann! und das mache ich wie folgt:

float grenzen[6];
float xkoord, ykoord;
int xdim,ydim;
int xmin ,xmax ,ymin ,ymax;



// geometrische Grenzen in x und y Richtung auslesen

polydata->GetBounds(grenzen); //(xmin,xmax,ymin,ymax, zmin,zmax).
xmin = grenzen[0] - 20;
xmax = grenzen[1] + 20;
ymin = grenzen[2] - 20;
ymax = grenzen[3] + 20;

// Akkumulator mit Raster 1mm für x-y Ebene einrichten
xdim = xmax - xmin;
ydim = ymax - ymin;
int akkumulator[xdim][ydim];

aber beim Kompilieren kommt immer die Fehlermeldung, dass für akkumulator[][] "konstante Ausdruck erwartet" ist und "error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich"

wie könnte ich das realisieren! warum werden xdim und ydim, die ich oben berechne nicht angenohmen!??

ich bedanke mich im Voraus....

Chrakhan

bei Antwort benachrichtigen
Dreamforger Chakhi „Array in C++“
Optionen

Wie bereits gesagt, kommst du bei einem anständigen Compiler nicht um eine dynamische Allokation rum (auch wenn ich schon C compiler gesehen hab die sowas fressen)

erstmal die Korrektur:
Da du ein Array vom typ int anlegst musst du nicht angeben wie groß die einzelnen Felder sind. So schlau ist der Compiler grad noch

int* pAkkum = new int[ xdim * ydim ];

bei malloc, bzw folgendem Konstrukt ist die Angabe nötig:

int* pAkkum = (int*)((void*) new char[ xdim * ydim *sizeof(int) ]);
int* pAkkum2 = (int*) malloc( xdim * ydim * sizeof(int) );


Jetzt noch zu mehrdimensionalen Arrays:

int **ppAkkum = new *int[xdim];
for ( int i = 0; i


Auf jeden Fall darfst du nicht vergessen die Arrays zu initialisieren!
Nachteile der mehrdimensionalen Arrays:
mehr Aufwand beim erstellen,
mehr Aufwand beim Löschen,
einfacher langsameren Code zu schreiben :-)

Vorteile
bequem und einfach zu benutzen sobald allokiert.
Lesbarer Code

bei Antwort benachrichtigen