[C++]Mehrdimensionales Array

Hi,

erstmal der Code:
Code:
const int hoehe = 10;
const int breite = 10;

struct S_Feldinfo
{
       bool besetzt;
};

S_Feldinfo Feld[hoehe][breite];


int main()
{
    int x;
    int y;
    
    Feld[5][5].besetzt = true;
    
    for ( y = 0; y < hoehe; y ++ )
     {
         for ( x = 0; x < breite; x ++ )
         {
             if ( Feld[x][y].besetzt == true )
             {
                  cout << "X";
             }
             else
             {
                 cout << ".";
             }
         }
         cout << endl;
     };
    
    getchar();
    return EXIT_SUCCESS;
}

so und nun Frage ich mich warum es mit den konstanten hoehe und breite funktioniert, sobald ich diese als nicht konstant deklariere klappt es nicht aber ich manipuliere die Variable in dem restlichen Teil doch gar nicht.
Es kommt immer die Meldung "variable-size type declared outside of any function" ..
welche Funktion ? :x


mfg nookstar
 
die initialisierung von arrays in c++ erwartet eine konstante größe. das ist alles. die größe mit dem das array initialisiert wird, muss schon vor der kompilierung feststehen. hat sich irgendwer mal so ausgedacht ;)

sonst hättest du ja ein dynamisches array ;)
 
da hab ich mich wohl ein bisschen komisch ausgedrückt ;) jedenfalls kann man ein array in c++ nur mit einer konstanten größen initialisieren... :)
 
M4CH!NE: ich bezog mich eigentlich nur auf den Post von nookstar. Wollte noch einen anständigen Verweis beifügen und hab wohl zu lange mit der Antwort getrödelt ;). Vor allem da man auf die schnelle keine "anständige" (verständliche) C++ Grammatik zum Nachprüfen findet. Zumindest laut der JavaCC Umsetzung wird sowas erwartet:
Bezeichner [ constant_expr() ]
 
Alles klar danke für die Anworten.

Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?
Also so :

Code:
char Name[5] = "Tom";
cout << Name;
Name = "hans";
cout << Name;

mfg nookstar
 
Das gleiche Problem habe ich auch ..

Aber ich glaube man kann nur jeden Char einzelnd ändern in dem man den Index auswählt etwa so:

array[0] = 'n';

Ich frage mich wie man dsa komplette array als ganzes Wort editiert also wie einen string.

mfg
 
ich kann dir da helfen ... du musst das array dynamisch anlegen uind dsas geht in etwas so

int *array = 0;
array = new int [6];

und wenn du fertig mit dem Prgramm ablauf bist musst du den Speicher des arrays löschen.

delete[] Lotto; // Freigabe des Speichers
Lotto = 0; // Zeiger sichern
 
Original von vv4yn3
Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?

Gibt für die Zeile "Name = "hans"" einen Fehler :
ISO C++ forbids assignment of arrays

Technisch gesehen ist ein Array ein Zeiger mit einem zu Anfang zugewiesenen Speicherbereich, aber C++ (im Gegensatz zu C) unterscheidet zwischen Arrays und Zeigern und verbietet (warum auch immer) Array-Zuweisungen. Wenn Du das gleiche also mit einem Zeiger schreibst,
Code:
char *Name = "Tom";
cout << Name;
Name = "hans";
cout << Name;
dann funktioniert die Zuweisung. Aber das klappt genau wie bei der Initialisierung (also der ersten Zuweisung) nur mit konstanten Strings und tatsächlich wird ein neues Array für "hans" erzeugt und "Tom" bleibt im Speicher, wie das folgende Beispiel zeigt:
Code:
char *Name1 = "Tom";
char *Name2 = Name1;
Name1 = "hans";
cout << Name1;
cout << Name2;
Um wirklich den String im ursprünglichen Array zu ändern, benutzt du strcpy(), wie Avenger sagt.
 
Original von nookstar
Alles klar danke für die Anworten.

Ich habe aber noch eine Frage und zwar wenn ein Array zugewiesen wird kann man diese Zuweisung dann nachher nicht mehr ändern ?
Also so :

Code:
char Name[5] = "Tom";
cout << Name;
Name = "hans";
cout << Name;

mfg nookstar


Natürlich kann man das ändern ...

wenn du ein array ausgeben willst musst du auch den INDEX angeben ... genauso wie bei der zuweisung


Code:
char Name[5] = "Tom"; // [5] ist der index
cout << Name; // hier muss es heissen -> cout << Name[5];
Name = "hans"; // hier wiederum -> Name[INDEX]="hans";
cout << Name;// cout Name[INDEX];
 
Nein, einen Index muss man nur angeben, wenn man auf ein einzelnes Array-Element zugreifen oder es ändern will. Und die Angabe "[5]" in "char Name[5] = "Tom"" ist die Größe des Arrays, kein Index.
 
wenn man c++ programmiert, dann will man normalerweise std::vector und std::string verwenden. die kuemmern sich dann auch um dieses ganze laestige verwalten von speicher...

http://www.cppreference.com/cppvector/index.html
http://www.cppreference.com/cppstring/index.html

es gibt da noch so ne voellig kaputte funktion um dynamisch speicher auf dem stack zu allozieren; alloca. die sollte man aber meiden wie die pest. :)

aus der glibc manpage zu alloca:

BUGS
The alloca() function is machine and compiler dependent. On many systems its implementation
is buggy. Its use is discouraged.

On many systems alloca() cannot be used inside the list of arguments of a function call,
because the stack space reserved by alloca() would appear on the stack in the middle of the
space for the function arguments.
 
Zurück
Oben